用直接选择排序在一个待排序区间中选出最小的数据时,与区间第一个数据对调,
而不是顺次后移。这导致方法不稳定。
当在 n 个数据(n 很大)中选出最小的 5 8 个数据时,锦标赛排序最快
锦标赛排序的算法中将待排序的数据个数 n 补足到 2 的 k 次幂 2
k-1
< n 2
k
在堆排序中将待排序的数据组织成完全二叉树的顺序存储。
4、交换排序
快速排序是一个递归的排序方法
当待排序排序码序列已经基本有序时,快速排序显著变慢。
5、二路归并排序
归并排序可以递归执行
归并排序需要较多的附加存储。可以采用一种“推拉法”实现归并排序,算法的时
间复杂度为 O (n)、空间复杂度为 O(1)
归并排序对待排序排序码的初始排列不敏感,排序速度较稳定
6、外排序
多路平衡归并排序的过程、I/O 缓冲区个数的配置
外排序的时间分析、利用败者树进行多路平衡归并
利用置换选择方法生成不等长的初始归并段
最佳归并树的构造及 WPL 的计算
三、教材中习题的解析
9-1 什么是内排序? 什么是外排序? 什么排序方法是稳定的? 什么排序方法是不稳定的?
【解答】
内排序是排序过程中参与排序的数据全部在内存中所做的排序,排序过程中无需进行
内外存数据传送,决定排序方法时间性能的主要是数据排序码的比较次数和数据对象的移
动次数。外排序是在排序的过程中参与排序的数据太多,在内存中容纳不下,因此在排序
过程中需要不断进行内外存的信息传送的排序。决定外排序时间性能的主要是读写磁盘次
数和在内存中总的记录对象的归并次数。
不稳定的排序方法主要有希尔排序、直接选择排序、堆排序、快速排序。不稳定的排
序方法往往是按一定的间隔移动或交换记录对象的位置,从而可能导致具有相等排序码的
不同对象的前后相对位置在排序前后颠倒过来。其他排序方法中如果有数据交换,只是在
相邻的数据对象间比较排序码,如果发生逆序(与最终排序的顺序相反的次序)才交换,因
此具有相等排序码的不同对象的前后相对位置在排序前后不会颠倒,是稳定的排序方法。
但如果把算法中判断逆序的比较“>(或<)”改写成“≥(或≤)”,也可能造成不稳定。
9-2 设待排序的排序码序列为{12, 2, 16, 30, 28, 10, 16*, 20, 6, 18}, 试分别写出使用以下排序
方法每趟排序后的结果。并说明做了多少次排序码比较。
(1) 直接插入排序 (2) 希尔排序(增量为 5,2,1) (3) 起泡排序
(4) 快速排序 (5) 直接选择排序 (6) 锦标赛排序
(7) 堆排序 (8) 二路归并排序 (9) 基数排序
【解答】
(1) 直接插入排序