基数排序_C#

首先我们引入一个多关键排序的概念

多关键字排序:假如现在有一个员工表,要求按照薪资排序,年铃相同的员工按照年龄排序。

那么我们从低关键词开始排序,先按照年龄进行排序,再按照薪资进行稳定的排序。稳定排序也就是相同元素位置不变的排序,

比如冒泡排序就是一种稳定排序,堆排序就是不稳定的排序,品,你细细的品

那么对32,13,94,52,17,54,93排序,是否可以看做多关键字排序?

比如32 13 52排序,先看个位2<3 变成32 52 13,再看十位1<3<5 变成13 32 52


我不做人啦!jojo!
←To Be Continued


是我dio哒!

    public void RadixSort(List<int> li)
    {
        int maxValue = li.Max();//列表内部方法拿过来用用
        int it = 0;//需要几趟
        //maxvalue 9-1 99-2 999-3
        //10^0<=9 10^1>9 it=1
        //10^0<99 10^1<99 10^2>99 it=2
        while (Mathf.Pow(10,it)<=maxValue)
        {
            List<List<int>> buckets = new List<List<int>>(10);//分10个桶对应0-9
            for (int i = 0; i < 10; i++)
            {
                buckets.Add(new List<int>());
            }//列表初始化大小
            for (int i = 0; i < li.Count; i++)//入桶
            {
                //989 it=0 989/10^it=989 989%10=9;
                int digit = (int)((li[i]) / (Mathf.Pow(10, it)) % 10);//得到对应桶
                buckets[digit].Add(li[i]);
            }//全部入桶
            li.Clear();//依次取出来
            for (int i = 0; i < buckets.Count; i++)
            {
                li.AddRange(buckets[i]);
            }
            it += 1;//继续下一次循环入桶出桶
        }
    }

 

测试一下 

没问题,位数不一样照样排序,因为你可以想象1和9134 入桶的时候是0001和9134,所以不影响排序 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值