此版本不支持负数0

    1. public IList<int> RadixSort(int[] nums)
    2. {
    3. //创建 0-9 的基数列表用来统计
    4. List<List<int>> mark = new List<List<int>>(10);
    5. for (int i = 0; i < 10; i++) mark.Add(new List<int>());
    6. //找出最大的位数
    7. int count = nums.Max().ToString().Length;
    8. while (count > 0)
    9. {
    10. mark.ForEach(list => list.Clear());
    11. //计算出要取模的数
    12. int a = 1000 / (int)Math.Pow(10,count);
    13. for (int i = 0; i < nums.Length; i++)
    14. {
    15. //计算出本位的索引
    16. int idx = nums[i] / a % 10;
    17. mark[idx].Add(nums[i]);
    18. }
    19. int start = 0;
    20. mark.ForEach(list => {
    21. if (list.Count > 0) list.ForEach(val => nums[start++] = val);
    22. });
    23. --count;
    24. }
    25. return nums;
    26. }