排序算法 (11.基数排序)

什么是基数排序

基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

基数排序 vs 计数排序 vs 桶排序

这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异:

基数排序:根据键值的每位数字来分配桶;
计数排序:每个桶只存储单一键值;
桶排序:每个桶存储一定范围的数值;

代码实现

在这里插入图片描述

效率

对于给定的n个d位数,取值范围为[0,k],我们使用计数排序比较元素的每一位,基数排序耗时Θ(n+k),那么基数排序的复杂度为Θ(d(n+k))。

我们还是和快速排序进行比较,仅仅从渐进性来看,基数排序比快速排序要好,但是隐藏在Θ符号后面的常数项因子是不同的,基数排序循环次数比快速排序循环次数少,但是基数排序每次循环会比快速排序长。更多的时候我们使用哪一种是通过输入数据的特征以及主存容量是否宝贵来决定的。当我们需要原址排序或者主存容量宝贵的时候我们就更倾向于快速排序这样的原址排序。

posted @ 2020-04-24 12:17  jacksonni  阅读(185)  评论(0编辑  收藏  举报