汉扬编程 C语言入门 C语言编程八大排序之基数排序

C语言编程八大排序之基数排序

基数排序的性能

C语言编程八大排序之基数排序

C语言编程八大排序之基数排序

时间复杂度:假设在基数排序中,r为基数,d为位数。则基数排序的时间复杂度为O(d(n+r))。可以看出,基数排序的效率和初始序列是否有序没有关联。

C语言编程八大排序之基数排序

空间复杂度:基数排序过程中,对于任何位数上的基数进行“装桶”操作时,都需要n+r个临时空间。

C语言编程八大排序之基数排序

算法稳定性:基数排序过程中,每次都是将当前位数上相同数值的元素统一“装桶”,并不需要交换位置。所以基数排序是稳定的算法。

C语言编程八大排序之基数排序

代码及分析

C语言编程八大排序之基数排序

以LSD为例,假设原来有一串数值如下所示:

C语言编程八大排序之基数排序

73, 22, 93, 43, 55, 14, 28, 65, 39, 81

首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中:

接下来将这些桶子中的数值重新串接起来,成为以下的数列:

81, 22, 73, 93, 43, 14, 55, 65, 28, 39

接着再进行一次分配,这次是根据十位数来分配:

接下来将这些桶子中的数值重新串接起来,成为以下的数列:

14, 22, 28, 39, 43, 55, 65, 73, 81, 93

这时候整个数列已经排序完毕;如果排序的对象有三位数以上,则持续进行以上的动作直至最高位数为止。

LSD的基数排序适用于位数小的数列,如果位数多的话,使用MSD的效率会比较好。MSD的方式与LSD相反,是由高位数为基底开始进行分配,但在分配之后并不马上合并回一个数组中,而是在每个“桶子”中建立“子桶”,将每个桶子中的数值按照下一数位的值分配到“子桶”中。在进行完最低位数的分配后再合并回单一的数组中。

代码:

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/cjia/6612.html

数控编程代码大全,30页PDF总结得非常详细(可下载打印)

PLC3种语言的区别,你了解吗?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部