Поразрядная трехпутевая сортировка - C#
Формулировка задачи:
Нужна данная сортировка. Заранее благодарен.
Решение задачи: «Поразрядная трехпутевая сортировка»
textual
Листинг программы
class RadixSorting {
public static void sorting(int[] arr, int range, int length) {
ArrayList[] lists = new ArrayList[range];
for(int i = 0; i < range; ++i)
lists[i] = new ArrayList();
for(int step = 0; step < length; ++step) {
//распределение по спискам
for(int i = 0; i < arr.Length; ++i) {
int temp = (arr[i] % (int)Math.Pow(range, step + 1)) /
(int)Math.Pow(range, step);
lists[temp].Add(arr[i]);
}
//сборка
int k = 0;
for(int i = 0; i < range; ++i) {
for(int j = 0; j < lists[i].Count; ++j) {
arr[k++] = (int)lists[i][j];
}
}
for(int i = 0; i < range; ++i)
lists[i].Clear();
}
}
}
class Test {
static void Main(string[] args) {
int[] arr = new int[100];
//заполнить массив случайными числами
Random rd = new Random();
for(int i = 0; i < arr.Length; ++i) {
arr[i] = rd.Next(0, 100);
}
System.Console.WriteLine("Массив до сортировки:");
foreach(double x in arr) {
System.Console.Write(x + " ");
}
RadixSorting.sorting(arr, 10, 2);
System.Console.WriteLine("\n\nМассив после сортировки:");
foreach(double x in arr) {
System.Console.Write(x + " ");
}
System.Console.WriteLine("\n\nНажмите <Enter>");
System.Console.ReadLine();
}