数据结构(C语言版)习题及答案
(从小到大排列),在(从大到小排列)情况下比较次数最多,其比较次数为(n(n-1)/2)。
5、对一组记录(50,40,95,20,15,70,60,45,80)进行直接插入排序时,当把
第7条记录60插入到有序表中时,为寻找插入位置需比较(3)次。
9.3 应用题
1、在各种排序方法中,哪些是稳定的?哪些是不稳定的?并为每一种不稳定的排序方
法举出一个不稳定的实例。
答:稳定的排序算法有直接插入排序、折半插入排序、冒泡排序、归并排序和基数排序。
不稳定的排序算法有希尔排序、直接选择排序、堆排序、快速排序。
例子:讲课是的例子。
2、设待排序的关键码分别为28,13,72,85,39,41,6,20。按折半插入排序已使
前七个记录有序,中间结果如下: 6 13 28 39 41 72 85 20 试在此基础上,沿用上述表达方式,给出继续采用折半插入第八条记录的比较过程,并回答
以下问题:
(1) 使用折半插入排序所要进行的比较次数,是否与待排序的记录的初始状态有关?
(2) 在一些特殊情况下,二分法插入排序比直接插入排序要执行更多的比较。这句话对吗?
答:
插入20的过程:
① 39>20:r=m-1=3;i<=r;m=(i+r)/2=4/2=2
② 13<20: i=m+1=3;i>r;查找过程结束,插入位置为i。
最终结果为:6 13 20 28 39 41 72 85
(1)插入排序所要进行的比较次数与待排序的记录的初始状态有关。若初始状态基本有序,
每次查找时都会搜索到有序表的最后一个元素才找到插入位置。若每次插入的元素在有序
表中的插入位置靠中间,则查找次数最少。
(2)在一些特殊情况下,二分法插入排序比直接插入排序要执行更多的比较。这句话是对
的。若初始状态基本有序,则折半插入排序,每次查找时都会搜索到有序表的最后一个元
素才找到插入位置。直接插入排序则每次只比较一次就找到合适位置。
3、已知一关键码序列为:3,87,12,61,70,97,26,45。试根据堆排序原理,填写
完整下示各步骤结果。
建立初始堆:_97 87 26 61 70 12 3 45
堆排序过程:
(1)87 70 26 61 45 12 3 97;(2) 70 61 26 3 45 12 87 97;
(3)61 45 26 3 12 70 87 97;(4) 45 12 26 3 61 70 87 97;
(5)26 12 3 45 61 70 87 97;(6) 12 3 26 45 61 70 87 97;
(7)3 12 26 45 61 70 87 97;
4、全国有10000人参加物理竞赛,只录取成绩优异的前10名,并将他们从高分到低分
输出。而对落选的其他考生,不需排出名次,问此种情况下,用何种排序方法速度最快?为
什么?
答:因排序的元素个数很大,所以需要采用排序速度较快的排序方法。排序速度比较
快的排序方法有快速排序、堆排序、归并排序和基数排序等。其中快速排序、归并排序和
基数排序都是在排序结束后才能确定数据元素的全部序列,而排序过程中无法知道部分连
续位置上的最终元素。但堆排序则每次输出一个堆顶元素(即最大或最小元素),然后对堆