Updated radix-sort.cs

pull/1086/head
Aditya Singh 2023-01-07 15:10:35 +05:30 committed by GitHub
parent cae530b09b
commit a82949c585
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 41 additions and 69 deletions

View File

@ -1,81 +1,53 @@
using System; using System;
using System.Collections.Generic;
using System.Text;
class myProgram { namespace Algorithms.Sorts
public static int getMax(int[] arr, int n) {
{ public class RadixSort
int mx = arr[0]; {
for (int i = 1; i < n; i++) public static List<int> Sort(List<int> numbers)
if (arr[i] > mx) {
mx = arr[i]; int max = numbers.Max();
return mx;
}
// A function to do counting sort of arr[] according to for (int exp = 1; max / exp > 0; exp *= 10)
// the digit represented by exp. {
public static void countSort(int[] arr, int n, int exp) numbers = CountingSort(numbers, exp);
{ }
int[] output = new int[n]; // output array
int i;
int[] count = new int[10];
// initializing all elements of count to 0 return numbers;
for (i = 0; i < 10; i++) }
count[i] = 0;
// Store count of occurrences in count[] public static List<int> CountingSort(List<int> numbers, int exp)
for (i = 0; i < n; i++) {
count[(arr[i] / exp) % 10]++; int[] counts = new int[10];
List<int> result = new List<int>(new int[numbers.Count]);
// Change count[i] so that count[i] now contains for (int i = 0; i < numbers.Count; i++)
// actual {
// position of this digit in output[] counts[(numbers[i] / exp) % 10]++;
for (i = 1; i < 10; i++) }
count[i] += count[i - 1];
// Build the output array for (int i = 1; i < counts.Length; i++)
for (i = n - 1; i >= 0; i--) { {
output[count[(arr[i] / exp) % 10] - 1] = arr[i]; counts[i] += counts[i - 1];
count[(arr[i] / exp) % 10]--; }
}
// Copy the output array to arr[], so that arr[] now for (int i = numbers.Count - 1; i >= 0; i--)
// contains sorted numbers according to current {
// digit result[counts[(numbers[i] / exp) % 10] - 1] = numbers[i];
for (i = 0; i < n; i++) counts[(numbers[i] / exp) % 10]--;
arr[i] = output[i]; }
}
// The main function to that sorts arr[] of size n using return result;
// 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 public static void Main()
// instead of passing digit number, exp is passed. {
// exp is 10^i where i is current digit number List<int> numbers = new List<int> { 100, 10, 1, 1000, 10000 };
for (int exp = 1; m / exp > 0; exp *= 10) List<int> sortedNumbers = Sort(numbers);
countSort(arr, n, exp);
}
// A utility function to print an array Console.WriteLine(string.Join(", ", sortedNumbers)); // 1, 10, 100, 1000, 10000
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);
}
} }