第八章——线性时间排序
一.决策树模型
决策树是一棵完全二叉树,它可以表示在给定输入规模情况下,某一特定排序算法对所有元素的比较操作。
二.排序算法的下界
定理 8.1:在最坏情况下,任何比较排序算法都需要做Ω(nlgn)次比较。
推论 8.2:堆排序和归并排序都是渐近最优的比较排序算法。
三.计数排序
计数排序假设n个输入元素中的每一个都是在0到k区间的一个整数,当k=O(n)时,排序的运行时间是Θ(n)。
计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数。
计数排序的一个重要性质就是它是稳定的:具有相同值的元素在输出数组中的相对次序与它们在输入数组中的相对次序相同。也就是说,对两个相同的数来说,在输入数组中先出现的,在输出数组中也先出现。
四.基数排序
基数排序时先按最低有效位进行排序,然后逐位向最高位遍历进行排序得到有效的输出。
RADIX-SORT(A,d)
for i = 1 to d
use a stable sort to sort array A on digit i
一般选择的这个稳定的排序是计数排序。
引理 8.3:给定n个d位数,其中每一个数位有k个可能的取值。如果RADIX-SORT使用的稳定排序方法耗时Θ(n+k),那么它就可以在Θ(d(n+k))时间内将这些数排好。
引理 8.4:
五.桶排序
桶排序的基本思想:桶排序将[0,1)区间划分为n个相同大小的子区间,或称为桶。然后,将n个输入数分别放到各个桶中(假设输入数据服从均匀分布)。先对桶中的数进行排序,最后遍历各个桶,按照次序把各个桶中的元素列出来即可。
伪代码:
图解:
桶排序的时间代价为:
桶排序的期望运行时间为:Θ(n)。
即使输入数据不服从均匀分布,桶排序也仍然可以线性时间内完成。只要输入数据满足下列性质:所有桶的大小的平方和与总的元素呈线性关系,根据上面的时间代价公式,可以知道,桶排序仍然可以在线性时间内完成。