比较排序:在排序的最终结果中,各元素的次序依赖于太难之间的比较。
8.1 排序算法的下界
决策树:完全二叉树,某一特定排序算法对所有元素的比较操作。
节点中标注的是序号不是元素值。
8.2 计数排序
需要了解输入数组中最大值可能是多大。
通过对输入数组中的元素进行计数来排序。
非原地算法,需要额外的n+k个空间。
排序是稳定的。最后一个循环从后向前遍历保持了稳定,否则不稳定。
练习
8.2-4 类似计数排序,建立存储,然后用a,b位置上的计数相减
8.3 基数排序
基数排序需要使用其他稳定的排序算法。
其对排序多关键字的记录,并多个关键字之间有优先级关系,是可用的。
基数排序是有缺陷的,其要求关键字个数相同,不能有记录缺失一个或多个关键字。
显然,关键字的选择非常关键,并且对时间复杂度产生影响。
8.4 桶排序
假设输入均匀分布,在
[0,1)
之间。需要额外的空间。
每个桶内期望元素数量的平方和总的元素数量呈线性关系,排序的时间复杂度中保持线性(即使输入不是均匀的)。