编辑代码

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]; // 初始化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();
    }
}