10内部排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第10章内部排序
10.1以关键码序列
(503, 087, 512, 061, 908, 170, 897, 275, 653, 426)为例,手工执行以下排序算法,写出每一趟排序结束时的关键码状态:
(1)直接插入排序(2) 希尔排序(d[1]=5, d[2]=3, d[3]=1) (3) 快速排序(第一个记录为基准记录) (4) 堆排序
(5) 归并排序(6) 基数排序
解答:
(1)直接插入排序:
第一趟:
087,503, 512, 061, 908, 170, 897, 275, 653, 426
第二趟:
087,503, 512, 061, 908, 170, 897, 275, 653, 426
第三趟:
061,087,503, 512, 908, 170, 897, 275, 653, 426
第四趟:
061,087,503, 512, 908, 170, 897, 275, 653, 426
第五趟:
061,087, 170, 503, 512, 908, 897, 275, 653, 426
第六趟:
061,087, 170, 275, 503, 512, 897, 908, 653, 426
第八趟:
061,087, 170, 275, 503, 512, 653, 897, 908, 426
第九趟:
061,087, 170, 275, 426, 503, 512, 653, 897, 908
(2)希尔排序
(d[1]=5, d[2]=3, d[3]=1)
第一趟:
170,087, 275, 061, 426, 503, 897, 512, 653, 908
第二趟:
061,087, 275, 170, 426, 503, 897, 512, 653, 908
第三趟:
061,087, 170, 275, 426, 503, 512, 653, 897, 908
(3) 快速排序(第一个记录为基准记录)
第一趟:
(426,087,275,061,170) 503(897,908,653,512)
第二趟:
(170, 087,275,061)426, 503(512,653)897(908)
第三趟:
(061,087)170(275) 426, 503,512(653) 897, 908
第四趟:
061,087, 170, 275, 426, 503, 512, 653, 897, 908
(4) 堆排序(小根堆为例)
建堆:
061, 087, 170, 275, 426,512, 897, 503, 653, 908
第一趟:(输出061)087, 275, 170, 503, 426,512,897,653
第二趟:(输出087)170, 275, 512, 503, 426, 653, 897,9 08
第三趟:(输出170)275, 406, 512, 503, 908, 653, 897
第四趟:(输出275)406, 503, 512, 897, 908, 653
第五趟:(输出406)503, 653, 512, 897, 908
第六趟:(输出503)512, 653, 908, 897
第七趟:(输出512)653, 897, 908
第八趟:(输出653)897, 908
第九趟:(输出897)908
(5) 归并排序
第一趟:
(087, 503)(061, 512)(170, 908)(275, 897)(426, 653)
第二趟:
(061, 087, 503, 512)(170, 275, 897, 908)(426, 653)
第三趟:
(061, 087, 170, 275, 503, 512, 897, 908) (426, 653)
第四趟:
061,087, 170, 275, 426, 503, 512, 653, 897, 908
(6)简单选择排序
第一趟:
061,087,512,503,908,170,897,275,653,426
第二趟:
061,087,512,503,908,170,897,275,653,426
第三趟:
061,087,170,503,908,512,897,275,653,426
第四趟
061,087,170,275,908,512,897,503,653,426
第五趟
061,087,170,275,426,512,897,503,653,908
第六趟
061,087,170,275,426,503,897,512,653,908
第七趟
061,087,170,275,426,503,512,653,897,908
10.7不难看出,对长度为n的记录序列进行快速排序时,所需进行的比较次数依赖于这n个元素的初始排列。
(1)n=7时在最好情况下需进行多少次比较?请说明理由。
(2)对n=7给出一个最好情况的初始排列实例。
解:最好的情况是每次都能均匀的划分序列.
例如 4,1,3,2,6,5,7,每次使用序列的第一个元素做枢轴.比较总次数为10次,交换3次,具体如下:
第一次枢轴为4,序列划分为{2,1,3},4,{6,5,7}