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.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<int> Sort(List<int> 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<int> CountingSort(List<int> numbers, int exp)
{
int[] counts = new int[10];
List<int> result = new List<int>(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);
// 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);
}
return result;
}
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
}
}
}