第8 章排序技术
课后习题讲解
1. 填空题
⑴排序的主要目的是为了以后对已排序的数据元素进行()。
【解答】查
【分析】对已排序的记录序列进行查通常能提高查效率。
⑵对n个元素进行起泡排序,在()情况下比较的次数最少,其比较次数为()。在()情况下比较次数最多,其比较次数为()。
【解答】正序,n-1,反序,n(n-1)/2
⑶对一组记录(54, 38, 96, 23, 15, 72, 60, 45, 83)进行直接插入排序,当把第7个记录60插入到有序表时,为寻插入位置需比较()次。
【解答】3
【分析】当把第7个记录60插入到有序表时,该有序表中有2个记录大于60。
⑷对一组记录(54, 38, 96, 23, 15, 72, 60, 45, 83)进行快速排序,在递归调用中使用的栈所能达到的最大深度为()。
【解答】3
⑸对n个待排序记录序列进行快速排序,所需要的最好时间是(),最坏时间是()。
【解答】O(nlog2n),O(n2)
⑹利用简单选择排序对n个记录进行排序,最坏情况下,记录交换的次数为()。
【解答】n-1
⑺如果要将序列(50,16,23,68,94,70,73)建成堆,只需把16与()交换。
【解答】50
⑻对于键值序列(12,13,11,18,60,15,7,18,25,100),用筛选法建堆,必须从键值为()的结点开始。
【解答】60
【分析】60是该键值序列对应的完全二叉树中最后一个分支结点。
2. 选择题
⑴下述排序方法中,比较次数与待排序记录的初始状态无关的是()。
A插入排序和快速排序B归并排序和快速排序
C选择排序和归并排序D插入排序和归并排序
【解答】C
【分析】选择排序在最好、最坏、平均情况下的时间性能均为O(n2),归并排序在最好、最坏、平均情况下的时间性能均为O(nlog2n)。
⑵下列序列中,()是执行第一趟快速排序的结果。
A [da,ax,eb,de,bb] ff [ha,gc]
B [cd,eb,ax,da] ff [ha,gc,bb]
C [gc,ax,eb,cd,bb] ff [da,ha]
D [ax,bb,cd,da] ff [eb,gc,ha]
【解答】A
【分析】此题需要按字典序比较,前半区间中的所有元素都应小于ff,后半区间中的所有元素都应大于ff。
⑶对初始状态为递增有序的序列进行排序,最省时间的是(),最费时间的是()。已知待排序序列中每个元素距其最终位置不远,则采用()方法最节省时间。
A 堆排序B插入排序C快速排序D 直接选择排序
【解答】B,C,B
【分析】待排序序列中每个元素距其最终位置不远意味着该序列基本有序。
⑷堆的形状是一棵()。
A二叉排序树B满二叉树C完全二叉树D 判定树
【解答】C
【分析】从逻辑结构的角度来看,堆实际上是一种完全二叉树的结构。
⑸当待排序序列基本有序或个数较小的情况下,最佳的内部排序方法是(),就平均时间而言,()最佳。
A 直接插入排序
B 起泡排序C简单选择排序D快速排序
【解答】A,D
⑹设有5000个元素,希望用最快的速度挑选出前10个最大的,采用()方法最好。
A快速排序B堆排序C希尔排序D 归并排序
【解答】B
【分析】堆排序不必将整个序列排序即可确定前若干个最大(或最小)元素。
⑺设要将序列(Q,H,C,Y,P,A,M,S,R,D,F,X)中的关键码按升序排列,则()是起泡排序一趟扫描的结果,()是增量为4的希尔排序一趟扫描的结果,()二路归并排序一趟扫描的结果,()是以第一个元素为轴值的快速排序一趟扫描的结果,()是堆排序初始建堆的结果。
A(F,H,C,D,P,A,M,Q,R,S,Y,X)
B(P,A,C,S,Q,D,F,X,R,H,M,Y)
C(A,D,C,R,F,Q,M,S,Y,P,H,X)
D(H,C,Q,P,A,M,S,R,D,F,X,Y)
E(H,Q,C,Y,A,P,M,S,D,R,F,X)
【解答】D,B,E,A,C
完全二叉树算法【分析】此题需要按字典序比较,并且需要掌握各种排序方法的执行过程。
⑻排序的方法有很多种,()法从未排序序列中依次取出元素,与已排序序列中的元素作比较,将其放入已排序序列的正确位置上。()法从未排序序列中挑选元素,并将其依次放入已排序序列的一端。交换排序是对序列中元素进行一系列比较,当被比较的两元素为逆序时,进行交换;()和()是基于这
类方法的两种排序方法,而()是比()效率更高的方法;()法是基于选择排序的一种方法,是完全二叉树结构的一个重要应用。
A 选择排序
B 快速排序
C 插入排序
D 起泡排序
E 归并排序
F 堆排序
【解答】C,A,D,B,B,D,F
⑼快速排序在()情况下最不利于发挥其长处。
A 待排序的数据量太大
B 待排序的数据中含有多个相同值
C 待排序的数据已基本有序
D 待排序的数据数量为奇数
【解答】C
【分析】快速排序等改进的排序方法均适用于待排序数据量较大的情况,各种排序方法对待排序的数据中是否含有多个相同值,待排序的数据数量为奇数或偶数都没有影响。
⑽()方法是从未排序序列中挑选元素,并将其放入已排序序列的一端。
A 归并排序
B 插入排序
C 快速排序
D 选择排序
【解答】D
3. 判断题
⑴如果某种排序算法是不稳定的,则该排序方法没有实际应用价值。
【解答】错。一种排序算法适合于某种特定的数据环境,有时对排序的稳定性没有要求。
⑵当待排序的元素很大时,为了交换元素的位置,移动元素要占用较多的时间,这是影响时间复杂性的主要因素。
【解答】对。此时着重考虑元素的移动次数。
⑶对n个记录的集合进行快速排序,所需要的附加空间是Ο(n)。
【解答】错。最坏情况下是Ο(n)。
⑷堆排序所需的时间与待排序的记录个数无关。
【解答】错。堆排序最好、最坏及平均时间均为Ο(nlog2n),是待排序的记录个数n的函数。一般来说,待排序的记录个数越多,排序所消耗的时间也就越多。
⑸设有键值序列(k1, k2, …, kn),当i>n/2时,任何一个子序列(ki, ki+1,… , kn)一定是堆。
【解答】对。当i>n/2时,ki, ki+1,… , kn 均是叶子结点,所以一定是堆。
4.已知数据序列为(12,5,9,20,6,31,24),对该数据序列进行排序,写出插入排序、起泡排序、快速排序、简单选择排序、堆排序以及二路归并排序每趟的结果。
【解答】用上述排序方法的每趟结果如下:
5.对n=7,给出快速排序一个最好情况和最坏情况的初始排列的实例。
【解答】最好情况:4,7,5,6,3,1,2
最坏情况:7,6,5,4,3,2,1
6.判别下列序列是否为堆,如不是,按照堆排序思想把它调整为堆,用图表示建堆的过程。
⑴(1,5,7,25,21,8,8,42)
⑵(3,9,5,8,4,17,21,6)
【解答】序列⑴是堆,序列⑵不是堆,调整为堆(假设为大根堆)的过程如图8-5所示。
7.已知下列各种初始状态(长度为n)的元素,试问当利用直接插入排序进行排序时,至少需要进行多少次比较(要求排序后的记录由小到大顺序排列)?
⑴关键码从小到大有序(key1< key2< … < keyn)。
⑵关键码从大到小有序(key1> key2> … > keyn)。
⑶奇数关键码顺序有序,偶数关键码顺序有序(key1< key3<…,key2 key4…)。br />⑷前半部分元素按关键码顺序有序,后半部分元素按关键码顺序有序,即:
(key1< key2< … < keym,keym+1< keym+2< …
【解答】依题意,最好情况下的比较次数即为最少比较次数。
⑴插入第i(2≤i≤n)个元素的比较次数为1,因此总的比较次数为:
1+1+……+1=n-1
⑵插入第i(2≤i≤n)个元素的比较次数为i,因此总的比较次数为:
2+3+……+n=(n-1)(n+2)/2
⑶比较次数最少的情况是所有记录关键码按升序排列,总的比较次数为:
n-1
⑷在后半部分元素的关键码均大于前半部分元素的关键码时需要的比较次数最少,总的比较次数为:
n-1
8.算法设计
⑴直接插入排序中寻插入位置的操作可以通过折半查来实现。据此写一个改进的插入排序的算法。
【解答】插入排序的基本思想是:每趟从无序区中取出一个元素,再按键值大小插入到有序区中。对于有序区,当然可以采用折半查来确定插入位置。具体算法如下:
mosimage}
⑵设待排序的记录序列用单链表作存储结构,试写出直接插入排序算法。
【解答】本算法采用的存储结构是带头结点的单链表。首先到元素的插入位置,然后把元素从链表中原位置删除,再插入到相应的位置处。具体算法如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论