搜索
简帛阁>技术文章>基数排序(利用了计数排序):时间复杂度为O(n)、有稳定性

基数排序(利用了计数排序):时间复杂度为O(n)、有稳定性

1、原理:
对于数组中所有的元素,利用元素每一位的值进行排序,如十进制元素数组[342,254,87],则先对个位排序,再对十位排序,最后对百位排序。由于十进制每一位范围为0-9,因此按位排序的过程调用计数排序。示意图图下:

2、伪代码:
假设n个d位元素存放在数组A中,其中第一位时低位,第d位时高位。

RadixSort(int* A,ind d)
{<!-- -->
	for(int i = 1;i<=d;i++){<!-- -->
		调用计数排序实现按位稳定排序
	}
}

参考资料: 算法导论8.3节 基数排序

总结:

1、基数排序时间复杂度为O(n),但常数项较大,同时其不是原址排序,因此不快于基于比较的排序算法(如快速排序、堆排序等)。
2、十进制基数位10,二进制基数位2。
3、当元素取值范围较大,但元素个数较少时可以利用基数排序。

1、原理:对于数组中所有的元素,利用元素每一位的值进行排序,如十进制元素数组[342,254,87],则先对个位排序,再对十位排序,最后对百位排序。由于十进制每一位范围09,因此按位排序的过程调用计
计数排序计数排序是一个非基于比较的排序算法,该算法于1954年由HaroldHSeward提出。它的优势在于在对一定范围内的整数排序时,它的复杂度Ο(n+k)(其中k是整数的范围,快于任何比较排序
本随笔来源于《剑指offer》第二版面试官:请实现一个排序算法,要求时间效率O(n)。应聘者:对什么数字进行排序多少个数字?面试官:我们相对公司的所有员工的年龄排序。我们公司一共有几万名员工。应
转自:http://blogcsdnnet/vast_sea/article/details/8167968看上去似乎任何已知的算法都无法做到,如果谁做到了,那么所有的排序方法:QuickSort,S
1:克鲁斯卡尔算法的时间复杂度O(e*logee边数。克鲁斯卡尔算法主要针对边展开,边数少时效率会很高,所以对于稀疏图优势。这个复杂度就是快排需要的时间。2:普里姆算法的时间复杂度O(n*n
hi~大家好,最近疫情慢慢控制,各城市也开始逐步复工。风雨终究会过去,但是依然还是要努力,不管是在什么时候。好了,本篇我们学习堆排序。啥子叫堆排序呢?堆排序利用堆这种数据结构而设计的一种排序算法,堆
题:给你两个排序的数组,求两个数组的交集。比如:A13457,B23589,那么交集就是35,n是a数组大小,m是b数组大小。思路:(1从b数组遍历取值,然后把值与a数组的每一个值进行比较,如果
算法基础~链表~求两个链表的交点(时间复杂度O(n)、空间复杂度O(1)1,接着上一篇的优化思路:https://wwwcnblogscom/shan333/p/15033376html2,还记得
这篇博客记录我对剑指offer第2版面试题39:数组中出现次数超过一半的数字题解1的一句话的一个小误解,以及汇总一下涉及partition算法的相关题目。在剑指offer第2版面试题39:数组中出现次
定义​对于不同的机器环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位在规模数量级上却是相同的,由此可以忽略机器环境的影响而客观的反应算法的时间效率。对于算法的时间