From 4a14fd63de12f111eac69dd8b0aec8c0dcc481e7 Mon Sep 17 00:00:00 2001 From: Aditya Singh <92062352+Adi-ty@users.noreply.github.com> Date: Tue, 22 Nov 2022 23:37:01 +0530 Subject: [PATCH] chore(CSharp): added radix sort --- algorithms/CSharp/src/Sorts/radix-sort.cs | 81 +++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 algorithms/CSharp/src/Sorts/radix-sort.cs diff --git a/algorithms/CSharp/src/Sorts/radix-sort.cs b/algorithms/CSharp/src/Sorts/radix-sort.cs new file mode 100644 index 00000000..5d43b883 --- /dev/null +++ b/algorithms/CSharp/src/Sorts/radix-sort.cs @@ -0,0 +1,81 @@ +using System; + +class myProgram { + public static int getMax(int[] arr, int n) + { + int mx = arr[0]; + for (int i = 1; i < n; i++) + if (arr[i] > mx) + mx = arr[i]; + return mx; + } + + // A function to do counting sort of arr[] according to + // the digit represented by exp. + public static void countSort(int[] arr, int n, int exp) + { + int[] output = new int[n]; // output array + int i; + int[] count = new int[10]; + + // initializing all elements of count to 0 + for (i = 0; i < 10; i++) + count[i] = 0; + + // Store count of occurrences in count[] + for (i = 0; i < n; i++) + count[(arr[i] / exp) % 10]++; + + // Change count[i] so that count[i] now contains + // actual + // position of this digit in output[] + for (i = 1; i < 10; i++) + count[i] += count[i - 1]; + + // Build the output array + for (i = n - 1; i >= 0; i--) { + output[count[(arr[i] / exp) % 10] - 1] = arr[i]; + count[(arr[i] / exp) % 10]--; + } + + // Copy the output array to arr[], so that arr[] now + // contains sorted numbers according to current + // digit + for (i = 0; i < n; i++) + arr[i] = output[i]; + } + + // The main function to that sorts arr[] of size n using + // Radix Sort + public static void radixsort(int[] arr, int n) + { + // Find the maximum number to know number of digits + int m = getMax(arr, n); + + // Do counting sort for every digit. Note that + // instead of passing digit number, exp is passed. + // exp is 10^i where i is current digit number + for (int exp = 1; m / exp > 0; exp *= 10) + countSort(arr, n, exp); + } + + // A utility function to print an array + public static void print(int[] arr, int n) + { + for (int i = 0; i < n; i++) + Console.Write(arr[i] + " "); + } + + // Driver Code + public static void Main() + { + int[] arr = { 170, 45, 75, 90, 802, 24, 2, 66 }; + int n = arr.Length; + + // Function Call + radixsort(arr, n); + print(arr, n); + } + + +}