经典算法:基数排序的小例子
1.概述
基数排序(Radixsort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机(TabulationMachine)上的贡献。
原理:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。基数排序的时间复杂度是O(k·n),其中n是排序元素个数,k是数字位数。
理解:类似【经典算法】第八回:桶排序,这里总是需要10个桶,多次使用,首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,然后再以十位数进行桶排序,依此类推。
如有待排序数组[62,14,59,88,16]简单点五个数字,分配10个桶,桶编号为0-9,以个位数数字为桶编号依次入桶,变成下边这样
将桶里的数字顺序取出来,输出结果:[62,14,16,88,59]
再次入桶,不过这次以十位数的数字为准,进入相应的桶,变成下边这样:由于前边做了个位数的排序,所以当十位数相等时,个位数字是由小到大的顺序入桶的,就是说,入完桶还是有序
因为没有大过100的数字,没有百位数,所以到这排序完毕,顺序取出即可
最后输出结果:[14,16,59,62,88]
2.示例
//基数排序C#Code
publicstaticvoidRadixSort(int[]nums,intdigit)
{
for(intk=1;k<=digit;k++)
{
int[]tmpArray=newint[nums.Length];
int[]tmpCountingSortArray=newint[10];
inti;
for(i=0;i<nums.Length;i++)
{
inttmpSplitDigit=nums[i]/(int)Math.Pow(10,k-1)-(nums[i]/(int)Math.Pow(10,k))*10;
tmpCountingSortArray[tmpSplitDigit]++;
}
for(i=1;i<tmpCountingSortArray.Length;i++)
{
tmpCountingSortArray[i]+=tmpCountingSortArray[i-1];
}
for(i=nums.Length-1;i>=0;i--)
{
inttmpSplitDigit=nums[i]/(int)Math.Pow(10,k-1)-(nums[i]/(int)Math.Pow(10,k))*10;
tmpArray[tmpCountingSortArray[tmpSplitDigit]-1]=nums[i];
tmpCountingSortArray[tmpSplitDigit]--;
}
for(i=0;i<nums.Length;i++)
{
nums[i]=tmpArray[i];
}
}
}
//int[]list=new[]{16,14,10,8,7,9,3,2,4,1};
//Sorter.RadixSort(list,2);
相关文章
- 深度学习经典算法 | 遗传算法详解
- C语言经典编程题100例 71~80
- 【经典书】图数据挖掘算法,安全性及应用
- 15个经典的Spring面试常见问题
- Matlab粒子群算法(PSO)优化程序——经典实例
- 主宰操作系统的经典算法
- (附下载)343页经典书籍《算法之道(第二版)》
- 十大经典排序算法-快速排序算法详解
- 软件设计师算法--常见算法,常见面试算法,经典面试算法
- GitHub上这份85w+ star的「254幅图解GC经典算法」进阶指南火了
- 经典递归解决汉诺塔_c语言汉诺塔递归算法
- 动画图解:十大经典排序算法动画与解析,看我就够了!(配代码完全版)[通俗易懂]
- hanoi塔问题如下图所示_hanoi塔问题最经典的算法
- 《异常检测——从经典算法到深度学习》6 基于重构概率的 VAE 异常检测
- 【C语言经典面试题】memcpy函数有没有更高效的拷贝实现方法?
- 【最全总结】离线强化学习(Offline RL)数据集、Benchmarks、经典算法、软件、竞赛、落地应用、核心算法解读汇总
- 关于递归算法的优化Ⅰ(以经典的斐波那契数列为例)
- 十大经典排序算法的介绍及实现
- 【经典好文】Linux应急响应
- Linux C编程大全(linuxc经典书籍)
- 本月Win10累积更新已放出:移除经典版Edge浏览器
- 百度手机地图下载 百度地图手机版 v8.0 经典版下载
- Linux考试经典挑战:提升你的技能(linux上机考试题)
- #新闻拍一拍# 微软推出经典进程监控工具 Procmon 的 Linux 版本
- SQLServerSA权限总结经典技术