排序作业答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.2设待排序的关键字序列为(15, 21, 6, 30, 23, 6′, 20, 17),试分别写出使用以下排序方法每趟排序后的结果。并说明做了多少次比较。(1) 直接插入排序(2) 希尔排序(增量为5,2,1) (3) 起泡排序(4) 快速排序(5) 直接选择排序(7) 堆排序(8)二路归并排序 (9)基数排序
【解答】(1) 直接插入排序
初始关键字序列: 15,21,6,30,23,6′,20,17
第一趟直接插入排序:【15,21】
第二趟直接插入排序:【6,15,21】
第三趟直接插入排序:【6,15,21,30】
第四趟直接插入排序:【6,15,21,23,30】
第五趟直接插入排序:【6,6′,15,21,23,30】
第六趟直接插入排序:【6,6′,15,20,21,23,30】
第七趟直接插入排序:【6,6′,15,17,20,21,23,30】
(2) 希尔排序(增量为5,2,1)
初始关键字序列: 15,21,6,30,23,6′,20,17
第一趟希尔排序: 6′,20,6,30,23,15,21,17
第二趟希尔排序: 6′,15,6,17,21,20,23,30
第三趟希尔排序: 6′,6,15,17,20,21,23,30
(3) 起泡排序
初始关键字序列:15,21,6,30,23,6′,20,17
第一趟起泡排序:15,6,21,23,6′,20,17,30
第二趟起泡排序:6,15,21,6′,20,17,23,30
第三趟起泡排序:6,15,6′,20,17,21,23,30
第四趟起泡排序:6,6′,15,17,20,21,30,23
第五趟起泡排序:6,6′,15,17,20,21,30,23
(4) 快速排序
初始关键字序列: 15,21,6,30,23,6′,20,17
第一趟快速排序:【6′,6】15【30,23,21,20,17】
第二趟快速排序: 6′,6, 15【17,23,21,20】30
第三趟快速排序: 6′,6, 15,17【23,21,20】30
第四趟快速排序: 6′,6, 15,17,【20,21】23,30
第五趟快速排序: 6,6′,15,17,20,21,30,23
(5) 直接选择排序
初始关键字序列: 15,21,6,30,23,6′,20,17
第一趟直接选择排序: 6,21,15,30,23,6′,20,17
第二趟直接选择排序: 6,6′,15,30,23,21,20,17
第三趟直接选择排序: 6,6′,15,30,23,21,20,17
第四趟直接选择排序: 6,6′,15,17,23,21,20,30
第五趟直接选择排序: 6,6′,15,17,20,21,23,30
第六趟直接选择排序: 6,6′,15,17,20,21,23,30
第七趟直接选择排序: 6,6′,15,17,20,21,23,30
(7) 堆排序
初始关键字序列:15,21,6,30,23,6′,20,17
初始堆: 6,17,6’,21,23,15,20,30
第一次调堆: 6’,17,15, 21,23,30,20,【6】
第二次调堆: 15,17,20,21,23,30,【6’,6】
第三次调堆: 17,21,20,30,23,【15,6’,6】
第四次调堆: 20,21,23,30,【17,15,6’,6】
第五次调堆: 21,30,23,【20,17,15,6’,6】
第六次调堆: 23,30,【21,20,17,15,6’,6】
第七次调堆: 30,【23,21,20,17,15,6’,6】
堆排序结果调堆:【30,23,21,20,17,15,6’,6】
(8) 二路归并排序
初始关键字序列: 15,21,6,30,23,6′,20,17
二路归并排序结果:15,17,20,21,23,30,6,6’
final↑↑first
(9) 基数排序
初始关键字序列:p→15→21→6→30→23→6′→20→17
第一次分配得到:
B[0].f→30→20←B[0].e
B[1].f→21←B[1].e
B[3].f→23←B[3].e
B[5].f→15←B[5].e
B[6].f→6→6’←B[6].e
B[7].f→17←B[7].e
第一次收集得到:
p→30→20→21→23→15→6→6’→17
第二次分配得到
B[0].f→6→6’←B[0].e
B[1].f→15→17←B[1].e
B[2].f→20→21→23←B[5].e
B[3].f→30←B[3].e
第二次收集得到
p→6→6’→15→17→20→21→23→30
基数排序结果:6,6′,15,17,20,21,23,30
10.2 试设计一个双向冒泡排序算法,即在排序过程中交替改变扫描方向。
void BubbleSort2(int a[],int n) ∥相邻两趟向相反方向起泡的冒泡排序算法{change=1;low=0;high=n-1; ∥冒泡的上下界
while(low {change=0; ∥设不发生交换 for(i=low;i if(a[i]>a[i+1]){a[i]<-->a[i+1];change=1;} ∥有交换,修改标志change high--; ∥修改上界 for(i=high;i>low;i--) ∥气泡下沉,小元素上浮(向左) if(a[i]a[i-1];change=1;} low++; ∥修改下界 }