排序作业答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++; ∥修改下界

}

相关文档
最新文档