From a82949c5858e31380647c949532bfcabac884e0e Mon Sep 17 00:00:00 2001 From: Aditya Singh <92062352+Adi-ty@users.noreply.github.com> Date: Sat, 7 Jan 2023 15:10:35 +0530 Subject: [PATCH] Updated radix-sort.cs --- algorithms/CSharp/src/Sorts/radix-sort.cs | 110 ++++++++-------------- 1 file changed, 41 insertions(+), 69 deletions(-) diff --git a/algorithms/CSharp/src/Sorts/radix-sort.cs b/algorithms/CSharp/src/Sorts/radix-sort.cs index 5d43b883..82ff7694 100644 --- a/algorithms/CSharp/src/Sorts/radix-sort.cs +++ b/algorithms/CSharp/src/Sorts/radix-sort.cs @@ -1,81 +1,53 @@ using System; +using System.Collections.Generic; +using System.Text; -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; - } +namespace Algorithms.Sorts +{ + public class RadixSort + { + public static List Sort(List numbers) + { + int max = numbers.Max(); - // 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]; + for (int exp = 1; max / exp > 0; exp *= 10) + { + numbers = CountingSort(numbers, exp); + } - // initializing all elements of count to 0 - for (i = 0; i < 10; i++) - count[i] = 0; + return numbers; + } - // Store count of occurrences in count[] - for (i = 0; i < n; i++) - count[(arr[i] / exp) % 10]++; + public static List CountingSort(List numbers, int exp) + { + int[] counts = new int[10]; + List result = new List(new int[numbers.Count]); - // 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]; + for (int i = 0; i < numbers.Count; i++) + { + counts[(numbers[i] / exp) % 10]++; + } - // 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]--; - } + for (int i = 1; i < counts.Length; i++) + { + counts[i] += counts[i - 1]; + } - // 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]; - } + for (int i = numbers.Count - 1; i >= 0; i--) + { + result[counts[(numbers[i] / exp) % 10] - 1] = numbers[i]; + counts[(numbers[i] / exp) % 10]--; + } - // 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); + return result; + } - // 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); - } + public static void Main() + { + List numbers = new List { 100, 10, 1, 1000, 10000 }; + List sortedNumbers = Sort(numbers); - // 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); - } - - + Console.WriteLine(string.Join(", ", sortedNumbers)); // 1, 10, 100, 1000, 10000 + } + } }