Updated radix-sort.cs
parent
cae530b09b
commit
a82949c585
|
@ -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
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public static void Main()
|
||||||
|
{
|
||||||
|
List<int> numbers = new List<int> { 100, 10, 1, 1000, 10000 };
|
||||||
|
List<int> sortedNumbers = Sort(numbers);
|
||||||
|
|
||||||
|
Console.WriteLine(string.Join(", ", sortedNumbers)); // 1, 10, 100, 1000, 10000
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue