数据结构第8章 内部排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第8章内部排序
【例8-1】已知关键字序列(12,77,21,65,38,7,38,53),给出采用直接插入排序方法按关键字递增序排列时的每一趟结果。
解:初始12 77 21 65 38 7 38 53
1趟12 77 21 65 38 7 38 53
2趟12 21 77 65 38 7 38 53
3趟12 21 65 77 38 7 38 53
4趟12 21 38 65 77 7 38 53
5趟7 12 21 38 65 77 38 53
6趟7 12 21 38 38 65 77 53
7趟7 12 21 38 38 53 65 77
(表示有序区)
【例8-2】待排序列为(39,80,76,41,13,29,50,78,30,11,100,7,41,86),步长因子分别取5、3、1,给出采用希尔排序方法按关键字递增序排列时的每一趟结果。
解:排序过程如下:
p=539 80 76 41 13 29 50 78 30 11 100 7 41 86
子序列分别为{39,29,100},{80,50,7},{76,78,41},{41,30,86},{13,11}。
第一趟排序结果:
p=3 29 7 41 30 11 39 50 76 41 13 100 80 78 86
子序列分别为{29,30,50,13,78},{7,11,76,100,86},{41,39,41,80}。
第二趟排序结果:
p=1 13 7 39 29 11 41 30 76 41 50 86 80 78 100
此时,序列基本“有序”,对其进行直接插入排序,得到最终结果:
7 11 13 29 30 39 41 41 50 76 78 80 86 100
【例8-3】已知序列(17,18,60,40,7,32,73,65,85),请给出采用冒泡排序法对该序列作升序排序时的每一趟的结果。
解:
初始1趟2趟3趟4趟5趟
17 17 17 17 7 7
18 18 18 7 17 17
60 40 7 18 18 18
40 7 32 32 32 32
7 32 40 40 40 40
32 60 60 60 60 60
73 65 65 65 65 65
65 73 73 73 73 73
85 85 85 85 85 85
(表示有序区)
【例8-4】已知关键字序列(38,12,21,77,65,7,38,53)给出采用快速排序方法按关键字增序排序时的第一趟块排过程,并举出一个反例说明快速排序是不稳定排序。
解:(1)
初始38 12 21 77 65 7 38 53
↑↑
low high
第一次交换
从high开始比较,得到的结果:
7 12 21 77 65 □38 53
↑↑
low high
从low开始比较,得到的结果:
7 12 21 □65 77 38 53
↑↑
low high
第二次交换
从high开始比较,得到的结果:
7 12 21 □65 77 38 53
↑↑
low high
low=high,所以第一趟快速排序的结果为:
7 12 21 38 65 77 38 53
关键字序列(2,2,1)可以作为一个反例。取第一个关键字作为支点,在一趟快排之后的结果是(1,2,2),由于2已在排序后的最终位置,2在2划分出的前一部分子表中,所以2不可能再出现在2之后,即不可能与原始序列中两者的顺序一致。此反例说明快速排序不是稳定排序。
【例8-5】已知序列(503,87,512,61,908,170,897,275,653,462),给出采用堆排序方法按关键字递增排序时的每一趟结果。
解:各趟结果如图8-1所示
(a) 初始 1 503 87 275 653 462 908 61 170 897 512 2 3 4 5 6 7 8 9 10 (b) 建堆
1
908
87
275 653 503 462 61 170 512 897 2 3 4 5 6 7 8 9 10 (c) 1趟:交换908
1 908 87 275 653
503 462 61 170 512
897 2 3 4 5 6 7 8 9 10 (d) 筛选调整 1 908 87 275 653 503 462 61 170 897 512 2 3 4 5 6 7 8 9 10
(e) 2趟:交换897和61
1 908 87
275
653 503 462 61 170 897
512 2 3 4 5 6 7 8 9 10 (f) 筛选调整
1 908 87 897 503 275 46
2 61 170 65
3 512 2 3
4
5
6
7
8
9 10
(o) 7趟:交换275和61
8 1 908
87
897
275 462 503 61
653 512
170 2
3 4 5 6 7 9 10 (p) 筛选调整
8 1 908
87 897 275
462 503 61
653
512
170
2 3
4 5
6 7 9 10
(m) 6趟:交换462和87 8 1 908
87 897 275
462 503 61
653 512 170 2
3 4 5
6 7 9 10 (n) 筛选调整
8
1 908
87 897 275
462 503
61
653 512
170
2 3 4 5
6 7 9 10 (i) 4趟:交换512和87 1 8 908
87 897 503
275 462 61 653 512 170 2 3 4 5
6 7 9 10 (j) 筛选调整
1 8 908
87
897
462 275 512
61 653 503 170
2 3 4
5
6 7
9 10 8 (g) 3趟:交换653和61
1
908
87
653
503 275 462 61 170 897 512 2
3 4 5 6 7 9 10 1 8 (h) 筛选调整
908
87
897 503
275
462 61 653 512
170
2 3
4
5
6 7 9 10 1 462
(k) 5趟:交换503和61 8 1 908
61
897 462 275 503
87 653 512 170 2
3 4 5
6 7 9 10 (l) 筛选调整
8
908
87 897 275
503
512
61
653 170
2 3 4 5 6 7 9
10