首先我们引入一个多关键排序的概念
多关键字排序:假如现在有一个员工表,要求按照薪资排序,年铃相同的员工按照年龄排序。
那么我们从低关键词开始排序,先按照年龄进行排序,再按照薪资进行稳定的排序。稳定排序也就是相同元素位置不变的排序,
比如冒泡排序就是一种稳定排序,堆排序就是不稳定的排序,品,你细细的品
那么对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,所以不影响排序