【数据结构】排序 归并排序和基数排序
1.归并排序
归并排序中的"归并"的意义就是把多个有序表合并为一个新的有序表。
算法思想:
二路归并排序:初始情况下将长度为n的待排序表分为n个子表,则每个子表的长度为1,是有序的。每趟排序尽量将这些子表按位置相邻两两归并,重复直到合并为一个长度为n的有序表为止。
具体实现:

在归并排序的实现过程中必须要用到一个辅助数组。
代码解释:


归并排序的算法过程是基于分治法实现的,先利用递归将整个表的归并排序分治为最基本的长度为1的表的归并排序,然后不断进行合并。
性能分析:
在这里分析2路归并排序算法
空间效率:O(n),需要用到辅助数组B
时间效率:每趟归并的时间复杂度为O(n),共进行⌈ log2n⌉趟归并,所以算法的时间复杂度为O(nlog2n)
稳定性:2路归并排序是稳定的排序算法。
2.基数排序
基数排序是一种特殊的算法,其运行机制是基于关键字各数位的大小进行排序。
是一种借助多关键字排序的思想对单逻辑关键字进行排序的算法。
算法思想:
基数排序的算法思想可以概括为从低位到高位一次进行计数排序。
实现过程:
例如,一个以10为基数的最低位优先的基数排序的过程,待排关键字都是1000以下的正整数。
则根据上面的问题描述:基数在这里其实就相当于关键字的进制,也就是这里的关键字都是1000以内的10进制正整数,则在排序过程中需要使用10个辅助队列(基数个),进行3轮排序(关键字最高有几位就进行几轮)。
每轮基数排序的过程由分配和收集两个步骤组成:


如上所示为基数排序的三轮排序过程。
性能分析:
设基数排序中的进制为r,关键字的最高位数为d,待排序表长度为n
空间效率:需要用到基数个辅助队列,所以其空间复杂度为O(r)
时间效率:基数排序中需要进行d趟排序,每趟排序中分配的复杂度为O(n),收集的复杂度为O(r),综合下来:基数排序的时间复杂度为O(d(n+r)),与待排序列的初始状态无关。
稳定性:由于基数排序的性质可得,它必须是稳定的,否则最终就不能最终得到有序的序列。

浙公网安备 33010602011771号