using System;
using System.Collections.Generic;
public class RadixSort
{
private static int GetMaxValue(int[] arr)
{
int max = arr[0];
for (int i = 1; i < arr.Length; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
return max;
}
public static void Sort(int[] arr)
{
int max = GetMaxValue(arr);
int digit = 1;
int n = arr.Length;
List<int>[] buckets = new List<int>[10];
for (int i = 0; i < 10; i++)
{
buckets[i] = new List<int>();
}
while (max / digit > 0)
{
for (int i = 0; i < n; i++)
{
int bucketIndex = (arr[i] / digit) % 10;
buckets[bucketIndex].Add(arr[i]);
}
int index = 0;
for (int i = 0; i < 10; i++)
{
foreach (int num in buckets[i])
{
arr[index++] = num;
}
buckets[i].Clear();
}
digit *= 10;
}
}
public static void Main(string[] args)
{
int[] arr = { 170, 45, 75, 90, 802, 24, 2, 66 };
Console.WriteLine("原始数组:");
PrintArray(arr);
Sort(arr);
Console.WriteLine("排序后数组:");
PrintArray(arr);
}
private static void PrintArray(int[] arr)
{
foreach (int num in arr)
{
Console.Write(num + " ");
}
Console.WriteLine();
}
}