第10章 排序一、选择题
1.某内排序方法的稳定性是指( )。 【南京理工大学 1997 一、10(2分)】
A.该排序算法不允许有相同的关键字记录 B.该排序算法允许有相同的关键字记录
C.平均时间为0(n log n)的排序方法 D.以上都不对
2.下面给出的四种排序法中( )排序法是不稳定性排序法。【北京航空航天大学 1999 一、10 (2分)】
A,插入 B,冒泡 C,二路归并 D,堆积
3.下列排序算法中,其中( )是稳定的。 【福州大学 1998 一、3 (2分)】
A,堆排序,冒泡排序 B,快速排序,堆排序
C,直接选择排序,归并排序 D,归并排序,冒泡排序
4.稳定的排序方法是( ) 【北方交通大学 2000 二、3(2分)】
A.直接插入排序和快速排序 B.折半插入排序和起泡排序
C.简单选择排序和四路归并排序 D.树形选择排序和shell排序
5.下列排序方法中,哪一个是稳定的排序方法?( ) 【北方交通大学 2001 一、8(2分)】
A.直接选择排序 B.二分法插入排序 C.希尔排序 D.快速排序
6.若要求尽可能快地对序列进行稳定的排序,则应选(A.快速排序 B.归并排序 C.冒泡排序)。
【北京邮电大学 2001 一、5(2分)】
7.如果待排序序列中两个数据元素具有相同的值,在排序前后它们的相互位置发生颠倒,则称该排序算法是不稳定的。( )就是不稳定的排序方法。【清华大学 1998 一、3 (2分)】
A.起泡排序 B.归并排序 C.Shell排序 D.直接插入排序 E.简单选择排序
8.若要求排序是稳定的,且关键字为实数,则在下列排序方法中应选( )排序为宜。
A.直接插入 B.直接选择 C.堆 D.快速 E.基数 【中科院计算所 2000 一、5(2分)】
9.若需在O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是( )。
A,快速排序 B,堆排序 C,归并排序 D,直接插入排序
【中国科技大学 1998 二、4(2分)】 【中科院计算所 1998 二、4(2分)】
10.下面的排序算法中,不稳定的是( ) 【北京工业大学 1999 一、2 (2分)】
A.起泡排序 B.折半插入排序 C.简单选择排序 D.希尔排序 E.基数排序 F.堆排序。
11.下列内部排序算法中,【北京工业大学 2000 一、1 (10分 每问2分)】
A.快速排序 B.直接插入排序 C,二路归并排序 D,简单选择排序 E,起泡排序 F,堆排序
(1) 其比较次数与序列初态无关的算法是( ) (2)不稳定的排序算法是( )
(3)在初始序列已基本有序(除去n个元素中的某k个元素后即呈有序,k<<n)的情况下,排序效率最高的算法是( )
(4)排序的平均时间复杂度为O(n?logn)的算法是( )为O(n?n)的算法是( )
12.排序趟数与序列的原始状态有关的排序方法是( )排序法。【北京航空航天大学 1999 一、9(2分)】
A.插入 B,选择 C,冒泡 D,快速
13.下面给出的四种排序方法中,排序过程中的比较次数与排序方法无关的是。( )
A.选择排序法 B,插入排序法 C,快速排序法 D,堆积排序法
【北京航空航天大学 2000 一、10(2分)】
14.对下列四种排序方法,在排序中关键字比较次数同记录初始排列无关的是( )。
A.直接插入 B,二分法插入 C,快速排序 D,归并排序
【南京理工大学 2000 一、7 (1.5分)】
15.在下列排序算法中,哪一个算法的时间复杂度与初始排序无关( )。【北京理工大学 2001 六、4 (2)】
A,直接插入排序 B,气泡排序 C,快速排序 D,直接选择排序
16.比较次数与排序的初始状态无关的排序方法是( )。【北方交通大学 2000 二、2(2分)】
A.直接插入排序 B.起泡排序 C.快速排序 D.简单选择排序
17.数据序列(8,9,10,4,5,6,20,1,2)只能是下列排序算法中的( )的两趟排序后的结果。
A.选择排序 B.冒泡排序 C.插入排序 D.堆排序
【合肥工业大学 1999 一、3 (2分)】
18.数据序列(2,1,4,9,8,10,6,20)只能是下列排序算法中的( )的两趟排序后的结果。
A,快速排序 B,冒泡排序 C,选择排序 D,插入排序
【合肥工业大学 2000 一、3 (2分)】
19.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为
(1) 84 47 25 15 21 (2) 15 47 25 84 21 (3) 15 21 25 84 47 (4) 15 21 25 47 84
则采用的排序是 ( )。 【南京理工大学 1997 一、2 (2分)】
A,选择 B,冒泡 C,快速 D,插入
20.对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15};则采用的是( )排序。【南京理工大学 1998 一、8(2分)】
A,选择 B,快速 C,希尔 D,冒泡
21.若上题的数据经一趟排序后的排列为{9,15,7,8,20,-1,4},则采用的是( )排序。
A.选择 B,堆 C,直接插入 D,冒泡 【南京理工大学 1998 一、9(2分)】
22.下列排序算法中( )不能保证每趟排序至少能将一个元素放到其最终的位置上。
A.快速排序 B,shell排序 C,堆排序 D.冒泡排序 【合肥工业大学 2001 一、3(2分)】
23.下列排序算法中( )排序在一趟结束后不一定能选出一个元素放在其最终位置上。
A,选择 B,冒泡 C,归并 D,堆
【南京理工大学 2001 一、7(1.5分)】【哈尔滨工业大学 2001 二、4(2分)】
24.下列序列中,( )是执行第一趟快速排序后所得的序列。 【福州大学 1998 一、9 (2分)】
A,[68,11,18,69] [23,93,73] B,[68,11,69,23] [18,93,73]
C,[93,73] [68,11,69,23,18] D,[68,11,69,23,18] [93,73]
25.有一组数据(15,9,7,8,20,-1,7,4) 用快速排序的划分方法进行一趟划分后数据的排序为 ( )(按递增序)。 【南京理工大学 1996 一、4 (2分)】
A.下面的B,C,D都不对。 B.9,7,8,4,-1,7,15,20
C.20,15,8,9,7,-1,4,7 D,9,4,7,8,7,-1,15,20
26.一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为( )。 【燕山大学 2001 一、4(2分)】
A.(38,40,46,56,79,84) B,(40,38,46,79,56,84)
C.(40,38,46,56,79,84) D,(40,38,46,84,56,79)
27,在下面的排序方法中,辅助空间为O(n)的是( ) 。【南京理工大学 1999 一、17(1分)】
A.希尔排序 B,堆排序 C,选择排序 D,归并排序
28.下列排序算法中,在待排序数据已有序时,花费时间反而最多的是( )排序。
A,冒泡 B,希尔 C,快速 D,堆 【南京理工大学 2001 一、12 (1.5分)】
29.下列排序算法中,在每一趟都能选出一个元素放到其最终位置上,并且其时间性能受数据初始特性影响的是:( )。
A,直接插入排序 B,快速排序 C,直接选择排序 D,堆排序
30,对初始状态为递增序列的表按递增顺序排序,最省时间的是( )算法,最费时间的是( )算法。
A,堆排序 B,快速排序 C,插入排序 D,归并排序 【南开大学 2000 一、5】
31,就平均性能而言,目前最好的内排序方法是( )排序法。【西安电子科技大学 1998 一、9 (2分)】
A,冒泡 B,希尔插入 C,交换 D,快速
32.如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用( )方法最快。
A.起泡排序 B.快速排列 C.Shell排序 D.堆排序 E.简单选择排序
【清华大学 1998 一、2 (2分)】
类似本题的另外叙述有:
(1)设有5000个无序的元素,希望用最快的速度挑选出其中前十个最大的元素,在以下的排序方法中( )最好?为什么? 【山东工业大学 1995 二、4 (3分)】
A.快速排序 B.堆排序 C.归并排序 D.基数排序 E.SHELL排序
(2)数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用( )算法最节省时间。
A,堆排序 B,希尔排序 C,快速排序 D,直接选择排序 【北京理工大学 2000 一、5 (2分)】
(3)设有1000个无序的元素,希望用最快的速度挑选出其中前十个最大的元素,在以下的排序方法中采用哪一种最好? ( ) 【东北大学 1999 一、5 (3分)】
A,快速排序 B,归并排序 C,堆排序 D.基数排序 E.shell排序
33.在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是( )
A.直接插入排序 B.冒泡排序 C.简单选择排序 【山东工业大学 1995 二、1 (2分)】
类似本题的另外叙述有:
(1)在文件"局部有序"或文件长度较小的情况下,最佳内部排序的方法是( )。
A,直接插入排序 B,冒泡排序 C,简单选择排序 D,快速排序 【山东大学 2001 二,2 (1分)】
(2)在待排序的元素序列基本有序的前提下,效率最高的排序方法是( )。 【武汉大学 2000 二、6】
A.插入排序 B,选择排序 C,快速排序 D,归并排序
34.下列排序算法中,( )算法可能会出现下面情况:在最后一趟开始之前,所有元素都不在其最终的位置上。【南开大学 2000 一、4】 【西北大学 2001 二、1】
A,堆排序 B,冒泡排序 C,快速排序 D,插入排序
35,下列排序算法中,占用辅助空间最多的是:( ) 【厦门大学 2002 五、2 (8分)】
A,归并排序 B,快速排序 C,希尔排序 D,堆排序
36.从未排序序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在已排序序列的合适位置,该排序方法称为( )排序法。【北京航空航天大学 1999 一、8(2分)】
A,插入 B,选择 C,希尔 D,二路归并
37,在排序算法中,每次从未排序的记录中挑出最小(或最大)关键码字的记录,加入到已排序记录的末尾,该排序方法是( )。【中山大学 1999 一、11】
A,选择 B,冒泡 C,插入 D,堆
38.用直接插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是( )。
A,94,32,40,90,80,46,21,69 B,32,40,21,46,69,94,90,80
C,21,32,46,40,80,69,90,94 D,90,69,80,46,21,32,94,40
【北方交通大学 2001 一、15 (2分)】
39.直接插入排序在最好情况下的时间复杂度为( )【北京邮电大学 1999 一、5 (2分)】
A,O(logn) B,O(n) C,O(n*logn) D,O(n2)
40,若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小排序,需进行 ( )次比较。
A,3 B,10 C,15 D,25 【南京理工大学 1999 一、11(4分)】
类似本题的另外叙述有:
(1)若用冒泡排序对关键字序列{18,16,14,12,10,8},进行从小到大的排序,所需进行的关键字比较总次数是( ) 【北京工商大学 2001 一、4(3分)】
A,10 B,15 C,21 D,34
41,采用简单选择排序,比较次数与移动次数分别为( )。【南京理工大学 2000 一、18(1.5分)】
A,O(n),O(logn) B,O(logn),0(n*n) C,0(n*n),0(n) D,0(nlogn),0(n)
42,对序列{15,9,7,8,20,-1,4,} 用希尔排序方法排序,经一趟后序列变为{15,-l,4,8,20,9,7}则该次采用的增量是 ( ) 【南京理工大学 1999 一、15(1分)】
A,l B,4 C,3 D,2
43.对下列关键字序列用快速排序法进行排序时,速度最快的情形是( )。
A,{21,25,5,17,9,23,30} B.{25,23,30,17,21,5,9}
C,{21,9,17,30,25,23,5} D,{5,9,17,21,23,25,30}【北方交通大学 2001 一、18 (2分)】
44.对关键码序列28,16,32,12,60,2,5,72快速排序,从小到大一次划分结果为( )。
A,(2,5,12,16)26(60,32,72) B,(5,16,2,12)28(60,32,72)
C,(2,16,12,5)28(60,32,72) D,(5,16,2,12)28(32,60,72) 【青岛大学 2000 三、4 (2分)】
45.对n个记录的线性表进行快速排序为减少算法的递归深度,以下叙述正确的是( )
A.每次分区后,先处理较短的部分 B.每次分区后,先处理较长的部分
C.与算法每次分区后的处理顺序无关 D.以上三者都不对 【北方交通大学 2000 二、5 (2分)】
46.当n个整型数据是有序时,对这n个数据用快速排序算法排序,则时间复杂度是 ( 6 ),当用递归算法求n!时,算法的时间复杂度是 ( 7 ),则:(6)-(7)=( )【南京理工大学1999 一、(6-7)(4分)】
A,O(n) B,O(nlogn) C,O(n*n) D,O(logn)
47.快速排序在最坏情况下的时间复杂度是( ),比( )的性能差。
A.O(NlogN) B.O(N2) C.O(N3) D.堆排序E.冒泡排序F.选择排序
【山东工业大学 1995 二、2 (4分)】
48,快速排序方法在( )情况下最不利于发挥其长处。 【燕山大学 2001 一、3 (2分)】
A,要排序的数据量太大 B,要排序的数据中含有多个相同值
C,要排序的数据个数为奇数 D,要排序的数据已基本有序
49.在含有n个关键字的小根堆(堆顶元素最小)中,关键字最大的记录有可能存储在( )位置上。
A.(n/2( B.(n/2( -1 C.1 D.(n/2( +2 【中科院计算所2000 一、4(2分)】
50,以下序列不是堆的是( )。【西安电子科技大学 2001应用一、5 (2分)】
A,(100,85,98,77,80,60,82,40,20,10,66) B,(100,98,85,82,80,77,66,60,40,20,10)
C,(10,20,40,60,66,77,80,82,85,98,100) D,(100,85,40,77,80,60,66,98,82,10,20)
51.下列四个序列中,哪一个是堆( )。 【北京工商大学 2001 一、8 (3分)】
A,75,65,30,15,25,45,20,10 B,75,65,45,10,30,25,20,15
C,75,45,65,30,15,25,20,10 D,75,45,65,10,25,30,20,15
52,堆排序是( )类排序,堆排序平均执行的时间复杂度和需要附加的存储空间复杂度分别是()
A,插入 B,交换 C,归并 D,基数 E,选择
F,O(n2)和O(1) G,O(nlog2n)和O(1)
H,O(nlog2n)和O(n) I,O(n2)和O(n) 【西北大学 2001 二、2】
53.在对n个元素的序列进行排序时,堆排序所需要的附加存储空间是( )。
A,O(log2n) B,O(1) C,O(n) D,O(nlog2n) 【西安电子科技大学2001应用一、10(2分)】
54,对n 个记录的文件进行堆排序,最坏情况下的执行时间是多少?( )
A.O(log2n)B.O(n) C.O(nlog2n) D.O(n*n) 【北方交通大学 2001 一、9(2分)】
55,有一组数据(15,9,7,8,20,-1,7,4),用堆排序的筛选方法建立的初始堆为 ( )
A.-1,4,8,9,20,7,15,7 B.-1,7,15,7,4,8,20,9
C.-1,4,7,8,20,15,7,9 D.A,B,C均不对。 【南京理工大学 1996 二、5(2分)】
56,归并排序中,归并的趟数是( )。【南京理工大学 2000 一、19(1.5分)】
A.O(n) B.O(logn) C.O(nlogn) D.O(n*n)
类似本题的另外叙述有:
(1)归并排序的时间复杂性是( )。 【中山大学 1999 一、12】
A.O(N*N) B,O(N) C,O(N*LOG(N)) D,O(LOG(N))
57,在排序算法中每一项都与其它各项进行比较,计算出小于该项的项的个数,以确定该项的位置叫( )
A.插入排序 B.枚举排序 C.选择排序 D.交换排序【北京邮电大学 2000 二、6 (20/8分)】
58.就排序算法所用的辅助空间而言,堆排序,快速排序,归并排序的关系是 ( )
A.堆排序〈 快速排序〈归并排序 B.堆排序〈 归并排序〈 快速排序
C.堆排序〉 归并排序 〉快速排序 D.堆排序 > 快速排序 > 归并排序
E.以上答案都不对 【西安交通大学 1996 三、1 (3分)】
59.排序方法有许多种,(1)法从未排序的序列中依次取出元素,与已排序序列(初始时为空)中的元素作比较,将其放入已排序序列的正确位置上;(2)法从未排序的序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端; 交换排序方法是对序列中的元素进行一系列比较,当被比较的两元素逆序时,进行交换;(3)和(4)是基于这类方法的两种排序方法,而(4)是比(3)效率更高的方法;(5)法是基于选择排序的一种排序方法,是完全二叉树结构的一个重要应用。 【北方交通大学 1999 一、3 (5分)】
(1)--(5),A.选择排序 B.快速排序 C.插入排序 D.起泡排序
E.归并排序 F.shell排序 G.堆排序 H.基数排序类似本题的另外叙述有:
(1)排序的方法有很多种,( )法从未排序的序列中依次取出元素与已排序序列中的元素比较,将其放在已排序序列的正确位置上;( )法从未排序序列中挑选元素,并将其依次放入已排序序列的一端;交换排序法是对序列中的元素进行一系列比较,当被比较的两元素逆序时,进行交换。( )和( )是基于这类方法的两种排序方法,而 ( )是比( )效率更高的方法。供选择的答案:
A,快速排序 B,选择排序 C,归并排序 D.冒泡排序 E.直接插入排序
【山东大学 1998 三、2 (5分)】 【山东工业大学 2000 三、2 (7分)】
60.设要将序列(q,h,c,y,p,a,m,s,r,d,f,x) 中的关键码按字母升序重新排序,
(1)( )是初始步长为4的shell排序一趟扫描的结果; (2)( )是对排序初始建堆的结果;
(3)( )是以第一个元素为分界元素的快速一趟扫描的结果。
从下面供选择的答案中选出正确答案填入括号内。 【厦门大学 2000 六、3 (16%/3分)】
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
类似本题的另外叙述有:
(1)在内排序的过程中,通常需要对待排序的关键码进行多编扫描,采用不同重新排序方法,会产生不同的排序中间结果。设要将序列<Q,H,C,Y,P,A,M,S,R,D,F,X>中的关键码按字母序的升序排列,则( 1 )是冒泡排序一趟扫描的结果,( 2 )是初始步长为4的希尔(SHELL)排序一趟扫描的结果,( 3 ) 是合并排序一趟扫描的结果,( 4 )是以第一个元素为分界元素的快速排序一趟扫描的结果,( 5 )是堆排序初始建堆的结果。供选择的答案,【上海海运学院 1997 二、3 (5分)】
1-5: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
61.对由n个记录所组成的表按关键码排序时,下列各个常用排序算法的平均比较次数分别是:二路归并排序为( 1 ),直接插入排序为( 2 ),快速排序为( 3 ),其中,归并排序和快速排序所需要的辅助存储分别是( 4 )和( 5 )。 【上海海运学院 1998 二、4 (5分)】
1-5:A,O(1) B,O(nlog2n) C,O(n) D,O(n2) E,O(n(log2n)2) F,O(log2n)
62.将两个各有N个元素的有序表归并成一个有序表,其最少的比较次数是( )
A.N B.2N-1 C.2N D.N-1
【中科院计算所 1998 二、7 (2分)】 【中国科技大学 1998 二、7 (2分)】
63,基于比较方法的n个数据的内部排序。最坏情况下的时间复杂度能达到的最好下界是( )。
A,O(nlogn) B,O(logn) C,O(n) D,O(n*n) 【南京理工大学 1996 一、2 (2分)】
64.已知待排序的n个元素可分为n/k个组,每个组包含k个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界应为( )。
A,O(nlog2n) B,O(nlog2k) C,O(klog2n) D,O(klog2k) 【中国科技大学 1998 二、9 (2分)】
类似本题的另外叙述有:
(1)已知待排序的N个元素可分为N/K个组,每个组包含K个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界应为( )
A,O(klog2k) B,O(klog2n) C,O(nlog2k) D,O(nlog2n) 【中科院计算所 1998 二、9 (2分)】
65.采用败者树进行k路平衡归并的外部排序算法,其总的归并效率与k ( )
A,有关 B.无关 【北京工业大学 2000 一,2 (3分)】
66.采用败者树进行K路平衡归并时,总的(包括访外)归并效率与K( )。
A.有关 B.无关 【北京工业大学 2001 一、4 (2分)】
二、判断题:
1.当待排序的元素很大时,为了交换元素的位置,移动元素要占用较多的时间,这是影响时间复杂度的主要因素。( )【长沙铁道学院 1998 一、10 (1分)】
2.内排序要求数据一定要以顺序方式存储。 ( )【南京理工大学 1997 二、2(2分)】
3.排序算法中的比较次数与初始元素序列的排列无关。()【南京航空航天大学 1997 一、8 (1分)】
4.排序的稳定性是指排序算法中的比较次数保持不变,且算法能够终止。( )
【南京航空航天大学 1996 六、9 (1分)】
5.在执行某个排序算法过程中,出现了排序码朝着最终排序序列位置相反方向移动,则该算法是不稳定的。( )【上海交通大学 1998 一、18】
6.直接选择排序算法在最好情况下的时间复杂度为O(N)。( )【合肥工业大学 2001 二、10(1分)】
7.两分法插入排序所需比较次数与待排序记录的初始排列状态相关。()【上海交通大学 1998 一、15】
8.在初始数据表已经有序时,快速排序算法的时间复杂度为O(nlog2n )。( )
【合肥工业大学 2000 二、9(1分)】
9.在待排数据基本有序的情况下,快速排序效果最好。( )【南京理工大学 1997 二、4(2分)】
10.当待排序记录已经从小到大排序或者已经从大到小排序时,快速排序的执行时间最省。( )
【上海交通大学 1998 一、16】
11.快速排序的速度在所有排序方法中为最快,而且所需附加空间也最少。( )
【北京邮电大学 1998 一、7 (2分)】
12.堆肯定是一棵平衡二叉树。( )【南京航空航天大学 1997 一、6 (1分)】
13.堆是满二叉树。( )【南京航空航天大学 1996 六、6 (1分)】
14.(101,88,46,70,34,39,45,58,66,10)是堆。( )【北京邮电大学 1999 二、1 (2分)】
15.在用堆排序算法排序时,如果要进行增序排序,则需要采用“大根堆”。( )
【合肥工业大学 2000 二、10(1分)】
16.堆排序是稳定的排序方法。( )【上海交通大学 1998 一、19】
17.归并排序辅助存储为O(1)。( )【青岛大学 2000 四、9(1分)】
18.在分配排序时,最高位优先分配法比最低位优先分配法简单。( )【上海交通大学 1998 一、20】
19,冒泡排序和快速排序都是基于交换两个逆序元素的排序方法,冒泡排序算法的最坏时间复杂性是O(n*n),而快速排序算法的最坏时间复杂性是O(nlog2n),所以快速排序比冒泡排序算法效率更高。 ( )
【上海海运学院 1997 一、9(1分)】
20.交换排序法是对序列中的元素进行一系列比较,当被比较的两个元素逆序时,进行交换,冒泡排序和快速排序是基于这类方法的两种排序方法,冒泡排序算法的最坏时间复杂性是O(n*n),而快速排序算法的最坏时间复杂性是O(nlog2n);所以快速排序比冒泡排序效率更高。( )
【上海海运学院 1998 一、10 (1分)】【上海海运学院 1995 一、10(1分)】
21.快速排序和归并排序在最坏情况下的比较次数都是O(nlog2n)。( )
【上海海运学院1996一、9(1分)】
22.在任何情况下,归并排序都比简单插入排序快。( )【北京邮电大学 2000 一、4 (1分)】
23.归并排序在任何情况下都比所有简单排序速度快。( )【北京邮电大学 2002 一、9(1分)】
24.快速排序总比简单排序快。( )【东南大学 2001 一、9 (1分)】
25,中序周游(遍历)平衡的二叉排序树,可得到最好排序的关键码序列。( )
【中山大学 1994 一、4 (2分)】
26.外部排序是把外存文件调入内存,可利用内部排序的方法进行排序,因此排序所花的时间取决于内部排序的时间。( )【北京邮电大学 1998 一、8 (2分)】
27.在外部排序时,利用选择树方法在能容纳m个记录的内存缓冲区中产生的初始归并段的平均长度为2m个记录。( )【上海海运学院 1999 一、10(1分)】
28.为提高在外排序过程中,对长度为N的初始序列进行“置换—选择”排序时,可以得到的最大初始有序段的长度不超过N/2。( )
29.排序速度,进行外排序时,必须选用最快的内排序算法。( )
30.在完成外排序过程中,每个记录的I/O次数必定相等。( )【大连海事大学 2001 一、20 (每题1分)】
31.影响外排序的时间因素主要是内存与外设交换信息的总次数。( )【东北大学 1997 二、5 (2分)】
三、填空题
1.若不考虑基数排序,则在排序过程中,主要进行的两种基本操作是关键字的______和记录的_____。
【北京邮电大学 2001 二、7 (4分)】
2,外排序的基本操作过程是_______和_______。【西安电子科技大学 1998 二、3 (3分)】
类似本题的另外叙述有:
(1)外部排序中两个相对独立的阶段是___和___。【西安电子科技大学 1999软件 一、8 (2分)】
3,属于不稳定排序的有__________。【青岛大学 2002 三、5 (2分)】
4.分别采用堆排序,快速排序,冒泡排序和归并排序,对初态为有序的表,则最省时间的是_____算法,最费时间的是______算法。【福州大学 1998 二、10 (2分)】
类似本题的另外叙述有:
(1)设表中元素的初始状态是按健值递增的,分别用堆排序,快速排序,冒泡排序和归并排序方法对其进行排序(按递增顺序),__排序最省时间,__排序最费时间。【厦门大学 2001 一、5 (14%/5分)】
5,不受待排序初始序列的影响,时间复杂度为O(N2)的排序算法是_____,在排序算法的最后一趟开始之前,所有元素都可能不在其最终位置上的排序算法是_____。【中国人民大学 2001 一、3 (2分)】
6.直接插入排序用监视哨的作用是_______。【南京理工大学 2001 二、8 (2分)】
7.对n个记录的表r[1..n]进行简单选择排序,所需进行的关键字间的比较次数为_______。
【华中理工大学 2000 一、10 (1分)】
8,用链表表示的数据的简单选择排序,结点的域为数据域data,指针域 next ;链表首指针为head,链表无头结点。
selectsort(head)
p=head;
while (p(1)_______)
{q=p; r=(2)_______
while((3)______ )
{if ((4)_______ ) q=r;
r=(5)_______ ;
}
tmp=q->data; q->data=p->data; p->data=tmp; p= (6)_______ ;
} 【南京理工大学 2000 三、2 (6分)】
9.下面的c函数实现对链表head进行选择排序的算法,排序完毕,链表中的结点按结点值从小到大链接。请在空框处填上适当内容,每个空框只填一个语句或一个表达式:
#include <stdio.h>
typedef struct node {char data; struct node *link; }node;
node *select(node *head)
{node *p,*q,*r,*s;
p=(node *)malloc(sizeof(node));
p->link=head; head=p;
while(p->link!=null)
{q=p->link; r=p;
while ((1)____)
{ if (q->link->data<r->link->data) r=q;
q=q->link;
}
if ((2)____) {s=r->link; r->link=s->link; s->link= ((3)_____); ((4)_____);}
((5)____) ;
}
p=head; head=head->link; free(p); return(head);
} 【复旦大学 1999 六(15分)】
10.下面的排序算法的思想是:第一趟比较将最小的元素放在r[1]中,最大的元素放在r[n]中,第二趟比较将次小的放在r[2]中,将次大的放在r[n-1]中,…,依次下去,直到待排序列为递增序。(注:<-->)代表两个变量的数据交换)。
void sort(SqList &r,int n) {
i=1;
while((1)__) {
min=max=1;
for (j=i+1;(2)____ ;++j)
{if((3)____) min=j; else if(r[j].key>r[max].key) max=j; }
if((4)_____) r[min] < ---- >r[j];
if(max!=n-i+1){if ((5)___) r[min] < ---- > r[n-i+1]; else ((6)__); }
i++;
}
}//sort 【南京理工大学 2001 三、2 (10分)】
11.表插入排序的基本思想是在结点中设一指针字段,插入Ri时Rl到Ri-1己经用指针按排序码不减次序链结起夹,这时采用顺序比较的方法找到Ri应插入的位置,做链表插入。如此反复,直到把Rn插入为止。
(1)(6分)请完成下列表插人的算法;【山东工业大学 2000 五(16分)】 【山东大学 1998 五】
①,R[0].LINK←(1)___; R[N].LINK←(2)___;
②,循环,I以-1为步长,从(3)___到(4)___执行
(1)P← R[0].LINK; Q← 0
(2)循环,当P>0且(5)__ 时,反复执行
Q←P; P←(6)___
(3)R[Q].LINK←I; R[I].LINK←P
(2)(2分) 表插入排序的最大比较次数是(7)__;
(3)(2分)表插入排序的最小比较次数是(8)__;
(4)(2分)记录移动的次数是(9)__;
(5)(2分)需要附加的存储空间是(10)__;
(6)(2分)该排序算法是否是稳定的(11)____。
12,设用希尔排序对数组{98,36,-9,0,47,23,1,8,10,7}进行排序,给出的步长(也称增量序列)依次是4,2,1则排序需__________趟,写出第一趟结束后,数组中数据的排列次序__________。
【南京理工大学 1997 三、5 (2分)】
13.从平均时间性能而言,__________排序最佳。【青岛大学 2001 六、5 (3分)】
14.对于7个元素的集合{1,2,3,4,5,6,7}进行快速排序,具有最小比较和交换次数的初始排列次序为_____。【长沙铁道学院 1997 二、1 (2分)】
15.快速排序在_____的情况下最易发挥其长处。【长沙铁道学院 1998 二、5 (2分)】
类似本题的另外叙述有:
(1)快速排序法在_____情况下最不利于发挥其长处,在_____情况下最易发挥其长处。
【山东大学 2001 三、5 (2分)】
16.在数据表有序时,快速排序算法的时间复杂度是____。【合肥工业大学 2001 三、10 (2分)】
17.堆排序的算法时间复杂度为:_____。【合肥工业大学 1999 三、10 (2分)】
18.PROC sift(VAR r:listtype;k,m:integer);
{假设r[k+1..m]中各元素满足堆的性质,本算法调整r[k]使整个序列r[k..m]中各元素满足堆的性质。}
i:=k; j:= (1)__; x:=r[k].key; finished:=false; t:=r[k];
WHILE (j<=m) AND NOT finished DO
[IF(j<m) AND ((2)__) THEN j:=j+1;
IF x<=r[j].key THEN finished:=(3)__
ELSE [r[i]:= (4)___; i:=j; j:= (5)____]
];
r[i]:=t;
ENDP;{sift} 【燕山大学 1998 四、2 (15分)】
19.设n为结点个数,datatype为结点信息类型。为了进行堆排序,定义:
TYPE node=RECORD key:integer;info:datatype END;
VAR heap:ARRAY[1..n] OF node
l,r,i,j:0..n ;x:node;
在下面的算法描述中填入正确的内容,使其实现1964年Floyd提出的建堆筛选法,要求堆建成后便找到了最小的关键码。
筛选算法sift(l,r,heap):
步1.[准备] i←l; j ←(1)___; x←heap[i]
步2.[过筛] 循环:当(2)____时反复执行
⑴.若j<r且 heap[j].key>heap[j+1].key 则(3)____
⑵.若(4)___则heap[i]←heap[j]; (5)____; (6)____ 否则跳出循环
步3.[结束]
heap[i] ← (7)____ 【山东工业大学 1996 三、2 (7分)】
20.以下程序的功能是利用堆进行排序。请在空白处填上适当语句,使程序完整。
PROCEDURE sift(VAR r:arr;k,m:integer);
VAR i,j,x:integer; t:rec; finished:boolean;
BEGIN
i:=k; (1)___; x:=r[i].key; (2)___;
t:=r[k];
WHILE (j<=m) AND NOT finished DO
BEGIN IF (j<m) AND (3)____THEN j:=j+1;
IF x<=r[j].key THEN finished:=true
ELSE BEGIN(4)____; (5)____; (6)____END;
END;
(7)___
END;
PROCEDURE heapsort(VAR r:arr);
VAR i:integer; x:rec;
BEGIN FOR i:=n DIV 2 DOWNTO 1 DO (8)___;
FOR i:=n DOWNTO 2 DO
BEGIN x:=r[1]; (9)___; r[i]:=x; (10)___ END;
END; 【北方交通大学 2000 四 (20分)】
21.堆是一种有用的数据结构。试判断下面的关键码序列中哪一个是堆__________。
①16,72,31,23,94,53 ②94,53,31,72,16,23 ③16,53,23,94,31,72
④16,31,23,94,53,72 ⑤94,31,53,23,16,72
堆排序是一种_(1)_类型的排序,它的一个基本问题是如何建堆,常用的建堆算法是1964年Floyd提出的_(2)_,对含有n个元素的序列进行排序时,堆排序的时间复杂度是_(3)_,所需要的附加结点是_(4)_。
【山东工业大学 1994 一、2 (5分)】
22.堆是一种有用的数据结构,堆排序是一种_(1)_排序,堆实质上是一棵_(2)_结点的层次序列。对含有N个元素的序列进行排序时,堆排序的时间复杂度是_(3)_,所需的附加存储结点是_(4)_。关键码序列05,23,16,68,94,72,71,73是否满足堆的性质_(5)_。 【山东工业大学 1996 三、1 (5分)】
23.将如下的堆排序算法补写完整。说明如下:
TYPE heaptype=ARRAY[1..n]OF integer;
过程heapsort的功能是将数组h中的前n个记录按关键字递减的次序排序。heapsort调用过程sift时的参数h,k,r有如下定义:以 h[k+1],h[k+2],…,h[r]为根的子树已经是堆;执行sift后,以h[k],h[k+1],h[k+2],…,h[r] 为根的子树都成为堆。
PROC sift(VAR h:heaptype;k,r:integer);
VAR i,j,x:integer;finish:boolean;
BEGIN i:=k;x:=h[i];j:=2*j;
((1)____);
WHILE (j<=r) AND NOT finish DO
[IF (j<r) AND (h[j]>h[j+1]) THEN j:=j+1;
IF x>h[j] THEN [(2)____ ]
ELSE finish:=true;
(3)____ ]
END;
PROC heapsort(VAR h:heaptype; n:integer);
VAR k,r,i,j:integer;
BEGIN
FOR k:=n DIV 2 DOWNTO 1 DO
sift ((4)____) ;
FOR r:=n DOWNTO 2 DO
[x:=h[1]; h[1]:=h[r]; h[r]:=x; ((5)____) ]
END; 【北京工业大学 1997 五、2 (16分)】
24.设有字母序列{Q,D,F,X,A,P,N,B,Y,M,C,W},请写出按2路归并排序方法对该序列进行一趟扫描后的结果_______。 【北方交通大学 2001 二、7】
25,阅读下列程序说明和PASCAL程序,把应填入其中______处的字句写在答题纸上。程序说明:
本题给出的是将数组a的元素a1,a2,…,an从大到小排序的子程序。子程序采用改进的选择排序方法,该方法基于以下思想:
在选择第一大元过程中,a1与aj(j=n,n-1,…,2)逐个比较,若发现aj1>a1,则aj1与a1变换,变换后新的aj1有性质aj1≥at(j1<t≤n),若再有aj2>a1 (j2<j1),aj2与a1交换,则交换后的aj2也有性质aj2≥at(j2<t≤n)。如在挑选第一大元过程中,与a1交换的元素有k(k≥0)个,依次为aj1,aj2,…,ajk,则它们都满足这一性质,它们的下标满足n≥j1>j2>…>jk>1。有了这些下标,在确定第二大元时,可只考虑a2与aj (j=jk,jk-1,…,3) 逐个比较。倘若jk=2,则可不经比较就知道它是第二大元。在选择第二大元过程中,将与a2交换过的元素下标也标记下来,可供选择其他大元使用,但在选择第二大元时,应保证与a2交换的那些位置上的新值也都满足上述性质,依次类推,顺序选择第一,第二,…,第n-1大元,实现对a的排序。
设程序包含有常量和类型定义:
CONST maxn=1000;
TYPE vector=ARRAY[1..maxn] OF integer;
index= 1..maxn;
PROCEDURE sort(VAR a:vector;n:index)
VAR p:vector; i,j,k,m,t:integer;
BEGIN
k:=0; i:=1; m:=n;
WHILE i<n DO
BEGIN
FOR j:=m DOWNTO i+1 DO
IF a[i]<a[j] THEN
BEGIN t:=a[i]; a[i]:=a[j]; a[j]:=t; k:=k+1;((1)____)END;
REPEAT((2)____);
IF((3)____)THEN((4)____)
ELSE BEGIN m:=p[k]; k:=k-1; END;
UNTIL (i<m) OR (i=n);
IF ((5)___)
BEGIN t:=a[i];((6)____);((7)____)END
END
END; 【上海海运学院 1997 七(14分)】
26.下列算法为奇偶交换排序,思路如下:第一趟对所有奇数的i,将a[i]和a[i+1]进行比较,第二趟对所有偶数的i,将a[i]和a[i+1]进行比较,每次比较时若a[i]>a[i+1],将二者交换;以后重复上述二趟过程,直至整个数组有序。
程序.(a)
PROCEDURE oesort(VAR a:ARRAY[1..n] OF integer);
VAR flag:boolean; i,t:integer;
BEGIN
REPEAT
flag:=false;
FOR i:=1 TO n step 2 DO
IF(a[i]>a[i+1]) THEN
[flag:= (1)____; t:=a[i+1]; a[i+1]:=a[i]; (2)____]
FOR i:= (3)____ DO
IF (a[i]>a[i+1]) THEN
[flag:= (4)____ ; t:=a[i+1];a[i+1]:=a[i]; a[i]:=t;]
UNTIL (5)___ ;
END;
程序(b)
void oesort (int a[n])
{int flag,i,t;
do {flag=0;
for(i=1;i<n;i++,i++)
if(a[i]>a[i+1])
{flag=(1)__; t=a[i+1]; a[i+1]=a[i]; (2)____;}
for (3)____
if (a[i]>a[i+1])
{flag=(4)____;t=a[i+1]; a[i+1]=a[i]; a[i]=t;}
}while (5)_;
} 【上海大学 2000 一、1 (10分)】
27.关键码序列( Q,H,C,Y,Q,A,M,S,R,D,F,X),要按照关键码值递增的次序进行排序,若采用初始步长为4的Shell排序法,则一趟扫描的结果是_____;若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是______。 【北京大学 1997 一、4 (4分)】
类似本题的另外叙述有:
(1)设有字符序列Q、H、C、Y、P、A、M、S、R、D、F、X要求按字符升序排序,采用初始步长为4的希尔(shell)排序,一趟扫描的结果是____;采用以首元素为分界元素的快速排序,一趟扫描的结果是_____。
【北京工业大学 1999 一、7 (8分)】
28.外部排序的基本方法是归并排序,但在之前必须先生成___。【北京邮电大学2001 二、6(2分)】
29.磁盘排序过程主要是先生成,然后对 合并,而提高排序速度很重要的是,我们将采用 方法来提高排序速度。 【山东工业大学 1995 一、4(4分)】
30.设输入的关键字满足k1>k2>…>kn,缓冲区大小为m,用置换-选择排序方法可产生____个初始归并段。
【武汉大学 2000 一、9】
31.下面是一改进了的快速排序算法,请填空并简要说明支持improveqsort递归所需要的最大栈空间用量。
PROCEDURE improveqsort(VAR list:afile;m,n:integer);
{设list[m].key<=list[n+1].key}
VAR i,j,k:integer;
BEGIN
WHILE m<n DO
BEGIN
i:=m; j:=n+1; k:=list[m].key;
REPEAT
REPEAT i:=i+1 UNTIL list[i].key>=k;
REPEAT j:=j-1 UNTIL list[j].key<=k;
IF i<j THEN interchange(list[i],list[j]);
UNTIL i>=j;
interchange(list[m],list[j]);
IF n-j>=j-m
THEN BEGIN
improveqsort(list,(1)____); (2)____;
END
ELSE BEGIN
improveqsort(list,(3)____); (4)____;
END
END; {OF WHILE}
END; 【东南大学 2001 五(10分)】
四、应用题
1,内部排序(名词解释)。 【燕山大学 1999 一、5 (2分)】
2,在各种排序方法中,哪些是稳定的?哪些是不稳定的?并为每一种不稳定的排序方法举出一个不稳定的实例。【大连海事大学 1996 七、3 (4分)】
类似本题的另外叙述有:
(1) 举例说明堆排序是否为稳定排序法,【西安电子科技大学 1996 三、4 (5分)】
(2) 选择排序算法是否稳定?为什么? 【燕山大学 2001 三、3 (5分)】
(3) 举例分析堆排序方法是否稳定。 【北京邮电大学 1993 二、3 (6分)】
(4) 堆排序是稳定排序吗?举例说明。 【东南大学 1996 一、5 (6分)】
(5) 试举例分析堆排序法是否稳定。 【东南大学 1999 一、5 (5分)】
(6) 树型选择排序通常采用顺序存储结构,①试指出n个元素的原始序列一般如何在该存储结构中存放(起始存储位置,次序),请说明理由。②讨论树形选择排序的稳定性。若稳定,须说明理由;不稳定,须举反例,并尝试找出使它稳定的方法。【北京工业大学 1999 七 (10分)】
3.在执行某种排序算法的过程中出现了排序码朝着最终排序序列相反的方向移动,从而认为该排序算法是不稳定的,这种说法对吗?为什么? 【燕山大学 2001 三、4 (5分)】
4.设有5个互不相同的元素a、b、c、d、e,能否通过7次比较就将其排好序?如果能,请列出其比较过程;如果不能,则说明原因。 【北方交通大学 1996 五(10分)】
5.对一个由n个关键字不同的记录构成的序列,能否用比2n-3少的次数选出该序列中关键字取最大值和关键字取最小值的记录?请说明如何实现?在最坏的情况下至少进行多少次比较?
【东南大学 2000 一、5 (8分)】
6.利用比较的方法进行排序,在最坏的情况下,能达到的最好时间复杂性是什么?请给出详细证明。
【上海交通大学 2000 六 (8分)】
7.以下概念的区别:拓扑排序与冒泡排序。 【大连海事大学 1996 三,2(3) (2分)】
8.简述直接插入排序,简单选择排序,2-路归并排序的基本思想以及在时间复杂度和排序稳定性上的差别。
【西北工业大学 1999 二 (8分)】
9.快速排序,堆排序和希尔排序是时间性能较好的排序方法,也是稳定的排序方法。判断正误并改错。
【燕山大学 1998 二、5 (2分)】
10,设LS是一个线性表,LS=(a1,a2,…,an),若采用顺序存储结构,则在等概率的前提下,插入一个元素需要平均移动的元素个数是多少?若元素插在ai与ai+1之间(0<=i<=n-1)的概率为(n-i)/(n*(n+1)/2),则插入一个元素需要平均移动的元素个数又是多少?【西安电子科技大学 2001软件 二、3 (5分)】
11.对于堆积排序法,快速排序法和归并排序法,若仅从节省存储空间考虑,则应该首先选取其中哪种方法?其次选取哪种方法?若仅考虑排序结果的稳定性,则应该选取其中哪种方法?若仅从平均情况下排序最快这一点考虑,则应该选取其中哪些方法?【北京航空航天大学 1998 一、10 (4分)】
12,在堆排序、快速排序和合并排序中,【吉林大学 2001 一、5 (6分)】
(1).若只从存储空间考虑,则应首先选取哪种排序方法,其次选取哪种排序方法,最后选取哪种排序方法?
(2).若只从排序结果的稳定性考虑,则应选取哪种排序方法?
(3).若只从平均情况下排序最快考虑,则应选取哪种排序方法?
(4).若只从最坏情况下排序最快并且要节省内存考虑,则应选取哪种排序方法?
13,快排序、堆排序、合并排序、Shell排序中哪种排序平均比较次数最少,哪种排序占用空间最多,哪几种排序算法是不稳定的? 【首都经贸大学 1997 一、3 (4分)】
14.欲求前k个最大元素,用什么分类方法好?为什么?什么是稳定分类?分别指出下列算法是否是稳定分类算法,或易于改成稳定分类算法? A,插入分类 B.快速分类 C.合并分类 D.堆分类 E.基数分类【东南大学 1994 一、3 (8分)】
15.考虑由三个不同关键词构成的序列:{a,b,c},试画出直接插入排序算法的二叉判定树。
【吉林大学 2001 一、3 (4分)】
16,请阅读下列算法,回答问题
PROCEDURE sort(r,n)
BEGIN
FOR i:=2 TO n DO
BEGIN
x:=r(i);r(O):=x;j:=i-1;
WHILE x.key<r(j).key DO
BEGIN
r(j+1):=r(j); j:=j-1
END;
r(j+1):=x
END
END;
问题一:这是什么类型的排序算法,该排序算法稳定吗?
问题二:设置r(O)的作用是什么?若将WHILE—DO 语句中判断条件改为x.key<=r(j).KEY,该算法将会有什么变化,是否还能正确工作?【上海海运学院 1998 六 (10分)】
17.下面是冒泡排序算法,请阅读并完成该程序,并回答以下问题:
PROCEDURE bubblesort (r,n)
BEGIN
i:=1; m:=n-1; flag:=1;
WHILE (i<=(1)___)AND(flag=(2)____) DO
BEGIN
flag:= (3)___;
FOR j:=1 TO m DO
IF r[j].key>r[j+1].key THEN
BEGIN flag:= (4)___; t:=r[j]; r[j]:=r[j+1]; r[j+1]:=t
END;
i:=i+1;m:=m-1
END;
END,
(1) 请在上面横线上填上适当的语句,完成该算法程序。
(2) 设计标志flag的作用是什么?
(3) 该算法结点的最大比较次数和最大移动次数是多少?
(4) 该分类算法稳定吗? 【上海海运学院 1996 六(12分) 1999 六(16分)】
18.仔细阅读下面的过程,并回答有关的问题
PROCEDURE unknownname(VAR A:array[1..500] OF integer;n:integer);
VAR i,j,x:integer; b:boolean;
BEGIN
b:=true; i:=1;
WHILE (i<n) AND b DO
BEGIN
b:=false;
FOR j:=1 TO(1)___DO
IF(2)___
THEN BEGIN
x:=A[j]; A[j]:=A[j+1]; A[j+1]:=x; (3)___
END;
i:=i+1;
END
END; 【西安电子科技大学 2001计应用 六 (14分)】
(1) 在 中填上正确的语句,使该过程能完成预期的功能。
(2) 该过程使用的是什么排序方法?
(3) 当数组A的元素初始时已按值递增排序,该过程执行中会进行多少次比较?多少次交换?
(4) 当数组A的元素初始时已按值递减排序,该过程执行中会进行多少次比较?多少次交换?
19.写出下列排序算法的基本思想,并写出对序列(23,12,35,47,16,25,36,19,21,16)进行排序时每一趟的结果。
PROC bbsort(VAR r,sequence; n,integer);
{r是一个数组}
d:=1; pos[-1]:=1; pos[1]:=n; i:=1; exchanged:= true;
WHILE exchanged DO
[ exchanged:= false;
WHILE i<>pos[d] DO
[IF (r[i]-r[i+d])*d>0 THEN [r[i]与r[i+d]交换; exchanged:=true;];
i:=i+d;
]
pos[d]:=pos[d]-d; i:=pos[d]; d:=-d;
]
ENDP; 【山东科技大学 2002 五 (12分)】
20.设要求从大到小排序。问在什么情况下冒泡排序算法关键字交换的次数为最大。
【南京航空航天大学 1996 九、1 (4分)】
21.设与记录R1,R2,…,Rn对应的关键词分别是K1,K2,…,Kn。如果存在Ri和Rj使得j<i且Ki<Kj成立,试证明经过一趟起泡后,一定有记录与Ri进 行交换,【吉林大学 1996 四、3 】
22.现有一文件F含有1000个记录,其中只有少量记录次序不对,且它们距离正确位置不远;如果以比较和移动次数作为度量,那末将其排序最好采用什么方法?为什么?【北方交通大学 1997 四(8分)】
23.分析下面排序算法中各带标号语句的频度及此算法的时间复杂度,并指出该算法是属于哪一种排序方法。 【北京邮电大学 1996 一、2 (7分)】
PROCEDURE sort (VAR a,ARRAY [1..n] OF integer);
BEGIN
1 FOR i:=1 TO n-1 DO
2 [j:=i;
3 FOR k:=j+1 TO n DO
4 IF a[k]<a[j] THEN j:=k;
5 t:=a[i]; a[i]:=a[j]; a[j];=t
]
END;
24,设待排序的关键码分别为28,13,72,85,39,41,6,20。按二分法插入排序算法已使前七个记录有序,中间结果如下,【山东工业大学 1996 七 (10分)】
6 13 28 39 41 72 85 20
i=1 m=4 r=7
试在此基础上,沿用上述表达方式,给出继续采用二分法插入第八个记录的比较过程。
(1) 使用二分法插入排序所要进行的比较次数,是否与待排序的记录的初始状态有关?
(2) 在一些特殊情况下,二分法插入排序比直接插入排序要执行更多的比较。这句话对吗?
25.算法模拟(15分,问题1,2各6分,问题3占3分)
设待排序的记录共7个,排序码分别为8,3,2,5,9,1,6。
(1) 用直接插入排序。试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序。
(2) 用直接选择排序。试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序。
(3) 直接插入排序算法和直接选择排序算法的稳定性如何?【山东工业大学 1997 四 (15分)】
26.在执行某个排序算法过程中,出现了排序关键字朝着最终排序序列相反的方向的移动,从而认为该算法是不稳定的。这种说法对么?为什么? 【东北大学 2001 一、1( 4分)】
类似本题的另外叙述有:
(1) (冒泡)排序过程中,有的关键字在某趟排序中可能朝着与最终排序相反的方向移动,试举例说明之。快速排序过程中有没有这种现象? 【东北大学 2000 一,5 (4分)】
27,对下面数据表,写出采用SHELL排序算法排序的每一趟的结果,并标出数据移动情况。(125,11,22,34,15,44,76,66,100,8,14,20,2,5,1)。【合肥工业大学 1999 四、4 (5分)】
28.快速排序的最大递归深度是多少?最小递归深度是多少?【清华大学 1999 一、1 (2分)】
29,已知某文件的记录关键字集为{50,10,50,40,45,85,80},选择一种从平均性能而言是最佳的排序方法进行排序,且说明其稳定性。【西安电子科技大学 1996 五 (10分)】
30,在内排序算法中,待排序的数据已基本有序时,花费时间反而最多的排序方法是哪种?
【西安电子科技大学 2000计应用 一、1 (5分)】
31.我们知道,对于n个元素组成的线性表进行快速排序时,所需进行的比较次数与这n个元素的初始排序有关。问,【西安电子科技大学 2001计应用 五(12分)】【中国矿业大学 2000 六 (10分)】
(1) 当n=7时,在最好情况下需进行多少次比较?请说明理由。
(2) 当n=7时,给出一个最好情况的初始排序的实例。
(3) 当n=7时,在最坏情况下需进行多少次比较?请说明理由。
(4) 当n=7时,给出一个最坏情况的初始排序的实例。
类似本题的另外叙述有:
(1) 快速排序(quick sorting)的效率与原始序列有关,现用快速排序算法对关键字分别为1—15的15 个元素进行排序
① 在最好情况下要进行几遍比较,给出一种原始序列实例;
② 在最坏情况下要进行几遍比较,给出一种原始序列实例。【浙江大学 1995 七(12分)】
(2) 对N个元素组成的线性表进行快速排序时,所需进行的比较次数依赖于这N个元素的初始排列。对N=7,给出快速排序的一个最好情况的初始排列实例(7个元素可取自集合{l,2,3,4,5,6,7})。
【西北大学 2000 二、5(5分)】
32.有一随机数组(25,84,21,46,13,27,68,35,20),现采用某种方法对它们进行排序,其每趟排序结果如下,则该排序方法是什么? 【武汉交通科技大学 1996 二、5 (6分)】
初 始:25,84,21,46,13,27,68,35,20 第一趟:20,13,21,25,46,27,68,35,84
第二趟:13,20,21,25,35,27,46,68,84 第三趟:13,20,21,25,27,35,46,68,84
33.快速排序是在所有情况下,排序速度最快吗?为什么?在何种情况下使用此排序法最好?
【北京邮电大学 1993 一、1 (5分)】
34.对给定文件(28,07,39,10,65,14,61,17,50,21)选择第一个元素28进行划分,写出其快速排序第一遍的排序过程。【厦门大学 1998 七、1 (8分)】
类似本题的另外叙述有:
(1) 对下列关键字序列进行快速排序(从小至大) (48,38,65,95,73,13,27,50)要求给出快速排序的算法思想,并画出排序过程示意图。 【南京航空航天大学 1999 五 (10分)】
(2) 设记录的关键字集合K={23,9,39,5,68,12,62,48,33},给定的增量序列D={4,2,1},请写出对K按“SHELL方法”排序时各趟排序结束时的结果;若每次以表的第一元素为基准(或枢轴),写出对K按“快速排序方法”排序时,各趟排序结束时的结果。
【北京科技大学 1999 七(10分) 2000 七(10分)】
35.下面是一改进了的快速分类算法
1,PROCEDURE qsort1(VAR list:afile;m,n:integer);
2 (设list[m].key<list[n+1].key)
3 VAR i,j,k:integer;
4 BEGIN
5 WHILE m<n DO
6 BEGIN
7 i:=m;j:=n+1; k:=list[m].key;
8 REPEAT
9 REPEAT i:=i+1 UNTIL list[i].key>=k;
10 REPEAT j:=j-1 UNTIL list[j].key<=k;
11 IF i<j THEN interchange (list[i],list[j]);
12 UNTIL i>=j;
13 interchange( list[m],list[j]);
14 IF n-j>=j-m
15 THEN BEGIN qsort1(list,m,j+1);m:=j+1;END
16 ELSE BEGIN qsort1(list,j+1,n);n:=j-1;END
17 END;(OF WHILE)
18 END.
问,
(1) 将第9、10行中的>=,<=分别改成>,<行吗?为什么? (5分)
(2) 该排序算法稳定否?举例说明 (5分)
(3) 对输入文件(22,3,30,4,60,11,58,18,40,16),列表表示该文件在每次调用qsort1时的状态及相应m、n值。(5分)
(4) 若输入文件有n个记录,简要说明支持qsort1递归所需最大栈空间用量(设一层递归用一个单位栈空间)。(5分) 【东南大学 1998 四 (20分)】
36.如果只要找出一个具有n个元素的集合的第k(1≤k≤n)个最小元素,你所学过的排序方法中哪种最适合?给出实现的思想。【北方交通大学 1998 六 (10分)】
37.已知快速排序和归并排序的算法分别如下所示:
PROCEDURE qksort(VAR r:listtype; s,t:integer);
BEGIN
IF s<t THEN BEGIN
qkpass(r,s,t,k);
qksort(r,s,k-1);
qksortd(r,k+1,t)
END
END;
PROCEDURE mergesort(VAR r,r1:listtype;s,t:integer);
BEGIN
IF s=t THEN r1[s]:=r[s] ELSE
BEGIN
MERGESORT(r,r2,s,(s+t)DIV 2);
MERGESORT(r,r2,(S+t)DIV 2+1,t);
MERGE(r2,s,(s+t)DIV 2,t,rl)
END
END;
若对下列关键字序列进行快速排序和归并排序,分别写出三次调用过程qkpass和过程merge后的结果。
(98,36,77,42,23,65,84,10,59,37,61,18)。 【清华大学 1996 六 】
38.已知一关键码序列为:3,87,12,61,70,97,26,45。试根据堆排序原理,填写完整下示各步骤结果。【首都经贸大学 1998 二、7 (10分)】
建立堆结构:_____________
交换与调整:
(1)87 70 26 61 45 12 3 97;(2)____________________;
(3)61 45 26 3 12 70 87 97;(4)____________________;
(5)26 12 3 45 61 70 87 97;(6)____________________;
(7)3 12 26 45 61 70 87 97;
39.判断下列序列是否是堆(可以是小堆,也可以是大堆,若不是堆,请将它们调整为堆)。
(1)100,85,98,77,80,60,82,40,20,10,66
(2)100,98,85,82,80,77,66,60,40,20,10
(3)100,85,40,77,80,60,66,98,82,10,20
(4)10,20,40,60,66,77,80,82,85,98,100
【山东大学 1998 四 (5分)】 【山东工业大学 2000 四 (5分)】
类似本题的另外叙述有:
(1) 判别以下序列是否是堆(大顶堆),如果不是,则把它调整为堆。
(12,70,33,65,24,56,48,92,86,33)【燕山大学 2001 四、1 (8分)】
(2) 判断下面的每个结点序列是否表示一个堆,如果不是堆,请把它调整成堆。
①100,90,80,60,85,75,20,25,10,70,65,50
②100,70,50,20,90,75,60,25,10,85,65,80 【复旦大学 1997 二 (8分)】
(3) 判别下列两个序列是否为堆,若不是,按照对序列建堆的思想把它调整为堆,用图表示建堆的过程。【厦门大学 2001 二、1 (24%/3分)】
①(1,5,7,20,18,8,8,40) ②(18,9,5,8,4,17,21,6)
(4)根据给定的关键字集合(20,15,40,35,45,25,50,30,10)顺序输入
①构造一棵完全二叉树;②画出整理好的一棵堆树;③画出一棵输出一个排序记录后的二叉树;
④画出重新调整好的堆树。 【大连海事大学 2001 六 (5分)】
40.全国有10000人参加物理竞赛,只录取成绩优异的前10名,并将他们从高分到低分输出。而对落选的其他考生,不需排出名次,问此种情况下,用何种排序方法速度最快?为什么?
【北京邮电大学 1996 一、3 (4分)】
类似本题的另外叙述有:
(1)如果在1000000个记录中找出2 个最小的记录,你认为采用什么样的排序方法所需的关键字比较次数最少?共计多少次? 【厦门大学 1999 三、4】
41.已知待排序的序列为(503,87,512,61,908,170,897,275,653,462),试完成下列各题。
(1) 根据以上序列建立一个堆(画出第一步和最后堆的结果图),希望先输出最小值。
(2) 输出最小值后,如何得到次小值。(并画出相应结果图)【同济大学 2001 二 (10分)】
类似本题的另外叙述有:
(1) 对于输入关键字序列48,70,65,33,24,56,12,92进行,
① 建立堆排序的初始堆(小顶堆),要求画出主要过程。
② 建一棵平衡二叉树,画出过程(至少每次调整有一张,标出最小不平衡子树的根)。
【北京工业大学 2001 二、5 (6分)】
(2) 简要叙述堆排序的算法思想。并对如下关键字序列(3,8,85,12,37,50)按堆排序算法进行从小到大排序,要求画出排序全过程的示意图。 【南京航空航天大学 1997 五 (10分)】
(3) 设记录关键字集合K={28,17,85,96,75,8,42,65,04}
① 写出对K进行“二路归并”且按关键字递增次序排序时,各趟排序的结果;
② 如何将K建成一个完全二叉树形式的最小堆; 【北京科技大学 1997 七(10分)】
42.设有n个无序元素,按非递减次序排序,但只想得到前面长度为k的部分序列,其中n>>k,最好采用什么排序方法?为什么?如果有这样一个序列{59,11,26,34,17,91,25},得到的部分序列是:{11,17,25},对于该例使用所选择的方法实现时,共执行多少次比较?【东北大学 2002 一、4(3分)】
类似本题的另外叙述有:
(1) 如果只想得到一个序列中第K个最小元素之前的部分排序序列,那么最好应采用哪种排序算法?为什么?如由这样一个序列:57,40,38,11,13,34,48,75,25,6,19,9,7 得到其第四个最小元素之前的部分排序序列:6,7,9,11,… 用你选用算法实现时,共执行多少次比较?
【北方交通大学 1994 七(16分)】
43.写出用堆排序算法对文件F=(12,3,15,30,9,28)进行排序时,初始堆及以后每挑好一个元素重新调整后堆的状态,并指出这里的堆和败者树的一个主要区别。【东南大学 1998 二(8分)】
44.请回答下列关于堆(Heap)的一些问题:【清华大学 2000 五 (12分)】
(1)(4分) 堆的存储表示是顺序的,还是链接的?
(2)(4分) 设有一个最小堆,即堆中任意结点的关键码均大于它的左子女和右子女的关键码。其具有最大值的元素可能在什么地方?
(3)(4分)对n个元素进行初始建堆的过程中,最多做多少次数据比较(不用大O表示法)?
45.解答问题
(1)(6分)设某文件中待排序记录的排序码为72,73,71,23,94,16,05,68,试画图表示出树形选择排序(增序)过程的前三步。
(2)(4分) 试说明树形选择排序的基本思想。
(3)(2分) 树形选择排序与直接选择排序相比较,优缺点是什么?
(4)(3分) 堆排序是如何改进树形排序方法的?优点是什么?
【山东大学 1999 五(15分)】 【山东工业大学 1999 五 (15分)】
46,若有N个元素已构成一个小根堆,那么如果增加一个元素为Kn+1,请用文字简要说明你如何在log2n 的时间内将其重新调整为一个堆? 【中科院计算所 1999 三、2 (5分)】
47.填空并回答相关问题
(1)下面是将任意序列调整为最大堆(MAX HEAP)的算法,请将空白部分填上:
将任意序列调整为最大堆通过不断调用adjust函数,即:FOR(i=n/2;i >0;i- -)adjust(list,i,n);其中list为待调整序列所在数组(从下标1开始),n为序列元素个数,adjust函数为:
void adjust(int list[],int root,int n)
/*将以root为下标的对应元素作为待调整堆的根,待调整元素放在list数组中,最大元素下标为n*/
{int child,rootkey;
rootkey=list[root];
child=2*root;
while(child<=n)
{if((child<n)&&(list[child]<list[child+1]))
(1)_______;
if(rootkey>list[child])
break;
else{List[(2) ]=list[child];
child*=2;
}
}
list[child/2]=rootkey;
}
(2).判断下列序列能否构成最大堆:(12,70,33,65,24,56,48,92,86,33);若不能按上述算法将其调整为堆,调整后的结果为:( )。 【浙江大学 1998 七 (11分)】
48.回答问题:(1) 设待排序的结点个数是n。试问堆排序算法在完成一次sift建堆,并且取走找到的最小关键码后,是否还需要对于n-1个关键码从头开始建堆?为什么?
(2) 假定采用sift建堆算法。试问堆排序算法采用了怎样的节省存储空间的措施?堆排序完成后,heap中保存了关键码值的升序排列还是降序排列? 【山东工业大学 1996 三、3 (8分)】
49.在多关键字排序时,LSD和MSD两种方法的特点是什么?【北京邮电大学 2001 三、3 (5分)】
50.内排序的过程中,通常需要对待排序的关键字集合进行多遍扫描。采用不同排序方法,会产生不同的中间结果。设要将序列(Q,H,C,Y,P,A,M,S,R,D,F,X)中的关键字按字母序的升序重新排列,请分别给出对该序列进行冒泡排序,初始步长为4的希尔排序,二路归并排序及以第一个元素为分界元素的快速排序的第一趟扫描的结果,并给出对该序列作堆排序时初始建堆的结果。【长沙铁道学院 1998 四、5(6分)】
51.给出一组关键字T=(12,2,16,30,8,28,4,10,20,6,18),写出用下列算法从小到大排序时第一趟结束时的序列;
(1) 希尔排序(第一趟排序的增量为5) (2) 快速排序(选第一个记录为枢轴(分隔))
(3) 链式基数排序(基数为10) 【上海交通大学 1999 八 (9分)】
52,给出一组关键字:29,18,25,47,58,12,51,10,分别写出按下列各种排序方法进行排序时的变化过程:【南开大学 1998 八 (12分)】
(1) 归并排序 每归并一次书写一个次序。
(2) 快速排序 每划分一次书写一个次序。
(3) 堆排序 先建成一个堆,然后每从堆顶取下一个元素后,将堆调整一次。
类似本题的另外叙述有:
(1) 对关键字/权值序列{9,4,3,8,10,7,6,5}
① 设序列是初始归并段的长度,画出最佳归并树,并计算其对应归并排序的I/O次数(假设每次I/O读写一个记录)。
② 设序列是关键字输入次序,画出得到的二叉排序树。
③ 画出构造初始小根堆的过程。
④ 画出快速排序第一趟的过程。
⑤ 画出步长为2的一趟希尔排序结果。【华南师范大学2000 二 (20分)】
53,(1) 判定起泡排序的结束条件是什么?
(2) 请简单叙述希尔排序的基本思想。
(3) 将下列序列调整成堆(堆顶为最小值)
1 2 3 4 5 6 7 8 9 10
112
70
33
65
24
56
48
92
80
13
(4)在16个关键字中选出最小的关键字至少要多少次比较?再选出次小的关键字至少要多少次比较?请简要说明选择的方法和过程。 【燕山大学 1999 九(14分)】
54.给出如下关键字序列321,156,57,46,28,7,331,33,34,63试按链式基数排序方法,列出一趟分配和收集的过程。 【北京轻工业学院 1999 九 (10分)】
类似本题的另外叙述有:
(1) 已知整数数组a的10个元素为326,129,167,588,212,95,980,725,443,601,用以下排序方法进行由小到大排序。 【西南交通大学 2000 二、6】
① 用基数排序算法时,试写出第一次分配和收集后数组a中的结果。
② 用堆排序时,试写出将第一个选出的数据放在数组a的最后位置上,将a调整为堆之后的a中的结果。
55.请写出应填入下列叙述中( )内的正确答案。 【上海大学 2002 一(8分)】
排序有各种方法,如插入排序、快速排序、堆排序等。
设一数组中原有数据如下:15,13,20,18,12,60。下面是一组由不同排序方法进行一遍排序后的结果。
( )排序的结果为:12,13,15,18,20,60
( )排序的结果为:13,15,18,12,20,60
( )排序的结果为:13,15,20,18,12,60
( )排序的结果为:12,13,20,18,15,60
56.图:
no
yes
no
yes
no no
yes yes
no
yes
no
yes
注:a是整数数组,存放要排序的数组集合,n是a的长度,p,i,j,k,m,t是临时变量,p为整型数组,i,j,k,m,t为整型变量。本题给出的是将数组a的元素a1,a2,…,an从大到小排序的子程序的框图,如上图,填空完善此算法框图。该子程序采用改进的选择排序方法,该方法基于以下思想:在选择第一大元过程中:a1与aj (j=n,n-1,…,2)逐个比较,若发现aj1>a1,则aj1与a1交换,交换后新的aj1有性质aj1>= at( j1<t<n )。若再有aj2>ai(j2<j1),aj2与a1交换,则交换后的aj2也有性质aj2>=at(j2<t<=n )。如在挑选第一大元过程中,与a1交换的元素有k(k>=0)个,依次为aj1,aj2,…,ajk,则它们都满足这一性质。它们的下标满足n>=j1>j2>…>jk>1。有了这些下标,在确定第二大元时,可只考虑a2与aj(j=jk,jk-1,…,3)逐一比较。倘若jk=2,则可不经比较就知道a2就是第二大元。在选择第二大元的过程中,将与a2交换过的元素下标也记录下来,可供选择其他大元使用。但在选择第二大元时,应保证与a2交换的那些位置上的新值也都满足上述性质。依次类推,顺序选择第一,第二,…,第n-1大元,实现对a的排序。
【哈尔滨工业大学 1999 六 (14分)】
57.给定一个关键字序列{24,19,32,43,38,6,13,22},请写出快速排序第一趟的结果;堆排序时所建的初始堆;归并排序的全过程。然后回答上述三中排序方法中那一种方法使用的辅助空间最少?在最坏情况下那种方法的时间复杂度最差? 【西安电子科技大学 1999五(10分)】
58.奇偶交换排序如下所述:对于初始序列A[1],A[2],…,A[n],第一趟对所有奇数i(1<=i<n),将A[i]和A[i+1]进行比较,若A[i]>A[i+1],则将两者交换;第二趟对所有偶数i(2<=i<n),将A[i]和A[i+1]进行比较,若A[i]>A[i+1],则将两者交换;第三趟对所有奇数i(1<=i<n);第四趟对所有偶数i(2<=i<n),…,依次类推直至到整个序列有序为止。
(1) 分析这种排序方法的结束条件。
(2) 写出用这种排序方法对35,70,33,65,24,21,33进行排序时,每一趟的结果。
【山东科技大学 2001 四(10分)】
59.设某文件经内排序后得到100个初始归并段(初始顺串),若使用多路归并排序算法,并要求三趟归并完成排序,问归并路数最少为多少?【山东大学1992 一、4(3分)】【东南大学1999一、3(5分)】
60.证明:置换-选择排序法产生的初始归并段的长度至少为m。(m是所用缓冲区的长度)。
【西安电子科技大学 1996 二、5 (5分)】
61.给定8个权值集合(2,5,3,10,4,7,9,18)画出含有8个叶子结点的最佳三叉归并树,并计算出wpl=? 【东北大学 1996 一、2 (5分)】
类似本题的另外叙述有:
(1) 假设有12个初始归并段,其长度分别为85,68,62,9,18,60,20,3,6,8,44,30;现要作4路外部归并排序,试画出表示归并过程的最佳归并树,并计算树的wpl。
【厦门大学 2001 二、3(24%/3分)】
(2) 设有12个初始归并段,其长度分别为8,6,30,44,62,18,85,68,9,60,3,20;试画出表示归并过程的最佳归并树,并计算树的WPL。 【厦门大学 1998 七、2 (8分)】
(3) 现有12个初始归并段,其记录数分别为:{30,44,8,6,3,20,60,18,9,62,68,85},现用3路平衡归并,画出最佳归并树。【北京邮电大学 2002 二、1 (5分)】
(4) 设有13个初始归并段,其长度分别为28,16,37,42,5,9,13,14,20,17,30,12,18.试画出4路归并时的最佳归并树,并计算它的带权路径长度WPL。 【清华大学 1998 九 (10分)】
62.已知有31个长度不等的初始归并段,其中8段长度为2;8段长度为3;7段长度为5;5段长度为12;3段长度为20(单位均为物理块),请为此设计一个最佳5-路归并方案,并计算总的(归并所需的)读/写外存的次数。 【清华大学 1994 四 (10分)】
类似本题的另外叙述有:
(1) 已知在进行置换-选择排序时得到14个有序段,其长度分别为2,3,4,5,6,7,8,9,11,13,17,20,21,23;现进行4路平衡归并,要求给出所对应的最佳归并树和总的读/写次数。
【中科院计算所 2000 二 (10分)】
(2) 已知某文件经过置换-选择排序后,得到长度分别为47,9,31,18,4,12,23,7的8个初始归并段。试为3路平衡归并设计读写外存次数最少的归并方案,并求出读写外存的次数。
【东南大学 2000 一、6 (8分)】
(3)置换选择排序得到初始归并段长(k字节数)为37,34,300,41,70,120,35,43作图表示出这些磁盘文件进行归并所用的4阶最佳归并树,算出归并的总读写字节数,每读写1字节计为1。
【北京工业大学 1999 六 (8分)】
63.以归并算法为例,比较内排序和外排序的不同,说明外排序如何提高操作效率。
【华南师范大学 1999四(10分)】
64.对输入文件(101,51,19,61,3,71,31,17,19,100,55,20,9,30,50,6,90);当k=6时,使用置换-选择算法,写出建立的初始败者树及生成的初始归并段。【北方交通大学 1999 四(12分)】
类似本题的另外叙述有:
(1)给出一组关键字T=(12,2,16,30,8,28,4,10,20,6,18),设内存工作区可容纳4个记录,写出用置换-选择排序得到的全部初始归并段。 【上海交通大学 1999 十】
(2)用置换-选择排序法产生文件 F(长度为 n)的初始归并段(设内存缓冲区的长度为m),
① 平均情况下,初始归并段的长度为多少?为什么?
② 初始归并段的长度最长与最短时,其长度分别为多少?在何种情况下出现?简单解释一下。
【上海交通大学 2000 九(8分)】
65.设有N个记录的一个文件,经内部排序后得到650个初始归并段。
(1) 试问在四台磁带机上分别用平衡归并和多步归并进行外部排序各需要多少趟归并?
(2) 给出多步归并排序前五趟归并的情况。(10分)【北方交通大学 1997 六 (16分)】
类似本题的另外叙述有:
(1)已知有8个初始归并段,其长度分别为10,20,25,30,45,12,16,2,现用T0,T1,T2三条磁带进行二路多步归并排序,写出每遍归并后各归并段的分布,并给出初始归并段在磁带上的最佳初始分布。
【西北工业大学 1998 二、1 (10分)】
66,写出或画出下面两题的结果,【北京邮电大学 1997 四 (10分)】
(1) 归并段长度分别为9,4,7,3,8,6,15,试画出3路平衡最佳归并树。
(2) 有二叉树中序序列为:A B C E F G H D ;后序序列为:A B F H G E D C,请画出此二叉树。
类似本题的另外叙述有:
(1)设有11个长度(即包含记录的个数)不同的初始归并段,它们所包含的记录个数分别为25,40,16,38,77,64,53,88,9,48,98。试根据它们做4路平衡归并,要求:
(1)指出总的归并趟数; (3分)
(2)构造最佳归并树; (8分)
(3)根据最佳归并树计算每一趟及总的读记录数。(5分)【清华大学 1997 八 (16分)】
67,外排序中为何采用k-路(k>2)合并而不用2-路合并?这种技术用于内排序有意义吗?为什么?
【东南大学 1995 三 (8分)】
68.给定输入文件:101,48,19,65,3,74,33,17,21,20,99,53,21,并设记录缓冲区个数k=4,写出基于败者树的外排序顺串生成算法runs输出的顺串。【东南大学 1996 一、6 (6分)】
五、算法设计题:
1.冒泡排序算法是把大的元素向上移(气泡的上浮),也可以把小的元素向下移(气泡的下沉)请给出上浮和下沉过程交替的冒泡排序算法。【吉林大学 2001 二、3 (9分)】
类似本题的另外叙述有:
(1) 编写一个双向气泡排序的算法,即相邻两遍向相反方向起泡。【北京邮电大学1992六(10分)】
2.有n个记录存储在带头结点的双向链表中,现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法。(注:双向起泡排序即相邻两趟排序向相反方向起泡)【北京邮电大学 1997 七(15分)】
3.请编写直接插入排序算法。
TYPE rcdtype=RECORD
key,integer;
otheritem,anytype;
END;
listtype=ARRAY[0..n] OF rcdtype; 【北京轻工业学院 1998 七 (10分)】
4.(此题单考生做)用类PASCAL语言(或PASCAL语言)完成下列各题:
设单链表头结点指针为L,结点数据值为整型,试写出对链表L按“插入方法”排序的算法:LINSORT(L)。
【北京科技大学 1999 十、1(10分) 2000 十、1 (10分)】
5.输入50个学生的记录(每个学生的记录包括学号和成绩),组成记录数组,然后按成绩由高到低的次序输出(每行10个记录)。排序方法采用选择排序。 【北京师范大学 1999 五 】
6.有一种简单的排序算法,叫做计数排序(count sorting)。这种排序算法对一个待排序的表(用数组表示)进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键码互不相同,计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键码比该记录的关键码小,假设针对某一个记录,统计出的计数值为c,那么,这个记录在新的有序表中的合适的存放位置即为c。
(1) (3分)给出适用于计数排序的数据表定义;
(2) (7分)使用Pascal或C语言编写实现计数排序的算法;
(3) (4分)对于有n个记录的表,关键码比较次数是多少?
(4) (3分)与简单选择排序相比较,这种方法是否更好?为什么? 【清华大学 2000 三(17分)】
类似本题的另外叙述有:
结点类型和存储方式如下:
(1)TYPE node=RECORD
key:integer;
info:datatype;
count:integer
END;
VAR r:ARRAY[1..n] OF node;
请给出一个排序方法,不移动结点存储位置,只在结点的count字段记录结点在排序中的序号(设排序码最大的结点序号为1)。 【国防科技大学 1999 七 】
7.快速分类算法中,如何选取一个界值(又称为轴元素),影响着快速分类的效率,而且界值也并不一定是被分类序列中的一个元素。例如,我们可以用被分类序列中所有元素的平均值作为界值。编写算法实现以平均值为界值的快速分类方法。 【石油大学 1998 五 (18分)】
8.写出一趟快速排序算法。【山东师范大学2000 二、4(10分) 2001 二、5(10分)】
类似本题的另外叙述有:
(1)某个待排序的序列是一个可变长度的字符串序列,这些字符串一个接一个地存储于唯一的字符数组中。请改写快速排序算法,对这个字符串序列进行排序。【西安电子科技大学 2000计应用 七(11分)】
(2) 若待排序列用单链表存储,试给出其快速排序算法。 【北京邮电大学 2000 七(15分)】
9.设有一个数组中存放了一个无序的关键序列K1、K2、…、Kn。现要求将Kn放在将元素排序后的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过n。(注:用程序实现)
【南京航空航天大学 1997 六(12分)】
10.借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。设此组记录存放于数组r[l..h]中。若查找成功,则输出该记录在r数组中的位置及其值,否则显示“not find”信息。请编写出算法并简要说明算法思想。 【北京邮电大学 1998 七(15分)】
11.已知关键字序列(K1,K2,K3,…,Kn-1)是大根堆。
(1) 试写出一算法将(K1,K2,K3,…,Kn-1,Kn)调整为大根堆;
(2) 利用(1)的算法写一个建大根堆的算法。【中科院软件所 1999 七、2 (7分)】
类似本题的另外叙述有:
(1)设文件(R1,R2,…,Rn)是一个堆,Rn+1是任意一个节点,试设计一个算法,该算法把Rn+1添加到堆中,并使添加后形成的文件仍是一个堆,要求算法的时间复杂性为O(log2n)。
【吉林大学 1999 二、2 (8分) 】
12.辅助地址表的排序是不改变结点物理位置的排序。辅助地址表实际上是一组指针,用它来指出结点排序后的逻辑顺序地址。设用K[1],K[2],…,K[N]表示N个结点的值,用T[1],T[2],…,T[N]表示辅助地址表.初始时T[i]:=i,在排序中,凡需对结点交换就用它的地址来进行。例如当N=3时,对K(31,11,19)则有T(2,3,1)。试编写实现辅助地址表排序(按非递减序)算法的语句序列。
【重庆大学 2000 四、2 】
13.关于堆排序方法,完成如下工作:
(1) 简述该方法的基本思想。
(2) 写出堆排序算法。
(3) 分析该算法的时间复杂度。 【西南财经大学 1999 五】
类似本题的另外叙述有:
(1)N个元素的序列满足什么条件才能称之为堆?用类PASCAL语言写出堆排序和算法。
【南开大学 1997 七 (15分)】
14.设待排序的文件用单链表作存储结构,其形式如下:
TYPE pointer=↑node;
node=RECORD
key:integer;
next:pointer;
END;
写出以head为头指针的选择排序算法。 【中山大学 1999 二 (10分)】
15.非递归的快速排序算法。【中科院软件所 1997 三 (10分)】
16.一最小最大堆(min max heap)是一种特定的堆,其最小层和最大层交替出现,根总是处于最小层。最小最大堆中的任一结点的关键字值总是在以它为根的子树中的所有元素中最小(或最大)。如图所示为一最小最大堆;
(1) 画出在上图中插入关键字为5的结点后的最小最大堆。
(2) 画出在上图中插入关键字为80 的结点后的最小最大堆;
(3) 编写一算法实现最小最大堆的插入功能。假定最小最大堆存放在数组中,关键字为整数。
(4) 用C或PASCA;实现上述算法。 【浙江大学 1996 八 (26分 )】
17,二路插入排序是将待排关键字序列r[1..n]中关键字分二路分别按序插入到辅助向量d[1..n]前半部和后半部(注:向量d可视为循环表),其原则为,先将r[l]赋给d[1],再从r[2] 记录开始分二路插入。编写实现二路插入排序算法。 【北京工业大学 1998 八 (10分)】
18,叙述基数排序算法,并对下列整数序列图示其基数排序的全过程。(179,208,93,306,55,859,984,9,271,33) 【南京航空航天大学 2000 一 】
19.输入N个只含一位数字的整数,试用基数排序的方法,对这N个数排序。
【中国人民大学 2001 三、1(10分)】
20.设记录R[i]的关键字为R[i].KEY(1<=i<=k),树结点T[i](1<=i<=K-1)指向败者记录,T[0]为全胜记录下标。写一算法产生对应上述R[i](1<=i<= k)的败者树,要求除R[1..k]和T[0..k-1]以外,只用O(1)辅助空间。 【东南大学 1995 九 (15分)】
21.设有顺序放置的n个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红,白,蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后,重新安排时对每粒砾石的颜色只能看一次,并且只允许交换操作来调整砾石的位置。【上海大学 1999 二 2(18分)】
22,数据结构DEAP的定义如下:DEAP是一棵完全二叉树,它或者是一棵空树,或者满足下列特性:
(1)树根不包含元素.(2)其左子树是一小堆(MINHEAP),其右子树是一大堆(MAXHEAP).
(3)若右子树非空,设i是左子树的任一结点,j是右子树中与i相应的结点.若这样的j结点不存在,则取j为右子树中与i的父结点相应的结点;结点i的关键字总是小于或等于结点j的关键字值。
一个DEAP的例子如右图所示,
与结点15相对应的结点为20,与结点19对应的结点为25.
给出在该DEAP中插入结点4后的结果.
写出在DEAP中插入新结点的算法.
用C或PASCAL语言编写实现上述算法的程序.(20分)
【浙江大学 1997 7 (20分)】
1.某内排序方法的稳定性是指( )。 【南京理工大学 1997 一、10(2分)】
A.该排序算法不允许有相同的关键字记录 B.该排序算法允许有相同的关键字记录
C.平均时间为0(n log n)的排序方法 D.以上都不对
2.下面给出的四种排序法中( )排序法是不稳定性排序法。【北京航空航天大学 1999 一、10 (2分)】
A,插入 B,冒泡 C,二路归并 D,堆积
3.下列排序算法中,其中( )是稳定的。 【福州大学 1998 一、3 (2分)】
A,堆排序,冒泡排序 B,快速排序,堆排序
C,直接选择排序,归并排序 D,归并排序,冒泡排序
4.稳定的排序方法是( ) 【北方交通大学 2000 二、3(2分)】
A.直接插入排序和快速排序 B.折半插入排序和起泡排序
C.简单选择排序和四路归并排序 D.树形选择排序和shell排序
5.下列排序方法中,哪一个是稳定的排序方法?( ) 【北方交通大学 2001 一、8(2分)】
A.直接选择排序 B.二分法插入排序 C.希尔排序 D.快速排序
6.若要求尽可能快地对序列进行稳定的排序,则应选(A.快速排序 B.归并排序 C.冒泡排序)。
【北京邮电大学 2001 一、5(2分)】
7.如果待排序序列中两个数据元素具有相同的值,在排序前后它们的相互位置发生颠倒,则称该排序算法是不稳定的。( )就是不稳定的排序方法。【清华大学 1998 一、3 (2分)】
A.起泡排序 B.归并排序 C.Shell排序 D.直接插入排序 E.简单选择排序
8.若要求排序是稳定的,且关键字为实数,则在下列排序方法中应选( )排序为宜。
A.直接插入 B.直接选择 C.堆 D.快速 E.基数 【中科院计算所 2000 一、5(2分)】
9.若需在O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是( )。
A,快速排序 B,堆排序 C,归并排序 D,直接插入排序
【中国科技大学 1998 二、4(2分)】 【中科院计算所 1998 二、4(2分)】
10.下面的排序算法中,不稳定的是( ) 【北京工业大学 1999 一、2 (2分)】
A.起泡排序 B.折半插入排序 C.简单选择排序 D.希尔排序 E.基数排序 F.堆排序。
11.下列内部排序算法中,【北京工业大学 2000 一、1 (10分 每问2分)】
A.快速排序 B.直接插入排序 C,二路归并排序 D,简单选择排序 E,起泡排序 F,堆排序
(1) 其比较次数与序列初态无关的算法是( ) (2)不稳定的排序算法是( )
(3)在初始序列已基本有序(除去n个元素中的某k个元素后即呈有序,k<<n)的情况下,排序效率最高的算法是( )
(4)排序的平均时间复杂度为O(n?logn)的算法是( )为O(n?n)的算法是( )
12.排序趟数与序列的原始状态有关的排序方法是( )排序法。【北京航空航天大学 1999 一、9(2分)】
A.插入 B,选择 C,冒泡 D,快速
13.下面给出的四种排序方法中,排序过程中的比较次数与排序方法无关的是。( )
A.选择排序法 B,插入排序法 C,快速排序法 D,堆积排序法
【北京航空航天大学 2000 一、10(2分)】
14.对下列四种排序方法,在排序中关键字比较次数同记录初始排列无关的是( )。
A.直接插入 B,二分法插入 C,快速排序 D,归并排序
【南京理工大学 2000 一、7 (1.5分)】
15.在下列排序算法中,哪一个算法的时间复杂度与初始排序无关( )。【北京理工大学 2001 六、4 (2)】
A,直接插入排序 B,气泡排序 C,快速排序 D,直接选择排序
16.比较次数与排序的初始状态无关的排序方法是( )。【北方交通大学 2000 二、2(2分)】
A.直接插入排序 B.起泡排序 C.快速排序 D.简单选择排序
17.数据序列(8,9,10,4,5,6,20,1,2)只能是下列排序算法中的( )的两趟排序后的结果。
A.选择排序 B.冒泡排序 C.插入排序 D.堆排序
【合肥工业大学 1999 一、3 (2分)】
18.数据序列(2,1,4,9,8,10,6,20)只能是下列排序算法中的( )的两趟排序后的结果。
A,快速排序 B,冒泡排序 C,选择排序 D,插入排序
【合肥工业大学 2000 一、3 (2分)】
19.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为
(1) 84 47 25 15 21 (2) 15 47 25 84 21 (3) 15 21 25 84 47 (4) 15 21 25 47 84
则采用的排序是 ( )。 【南京理工大学 1997 一、2 (2分)】
A,选择 B,冒泡 C,快速 D,插入
20.对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15};则采用的是( )排序。【南京理工大学 1998 一、8(2分)】
A,选择 B,快速 C,希尔 D,冒泡
21.若上题的数据经一趟排序后的排列为{9,15,7,8,20,-1,4},则采用的是( )排序。
A.选择 B,堆 C,直接插入 D,冒泡 【南京理工大学 1998 一、9(2分)】
22.下列排序算法中( )不能保证每趟排序至少能将一个元素放到其最终的位置上。
A.快速排序 B,shell排序 C,堆排序 D.冒泡排序 【合肥工业大学 2001 一、3(2分)】
23.下列排序算法中( )排序在一趟结束后不一定能选出一个元素放在其最终位置上。
A,选择 B,冒泡 C,归并 D,堆
【南京理工大学 2001 一、7(1.5分)】【哈尔滨工业大学 2001 二、4(2分)】
24.下列序列中,( )是执行第一趟快速排序后所得的序列。 【福州大学 1998 一、9 (2分)】
A,[68,11,18,69] [23,93,73] B,[68,11,69,23] [18,93,73]
C,[93,73] [68,11,69,23,18] D,[68,11,69,23,18] [93,73]
25.有一组数据(15,9,7,8,20,-1,7,4) 用快速排序的划分方法进行一趟划分后数据的排序为 ( )(按递增序)。 【南京理工大学 1996 一、4 (2分)】
A.下面的B,C,D都不对。 B.9,7,8,4,-1,7,15,20
C.20,15,8,9,7,-1,4,7 D,9,4,7,8,7,-1,15,20
26.一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为( )。 【燕山大学 2001 一、4(2分)】
A.(38,40,46,56,79,84) B,(40,38,46,79,56,84)
C.(40,38,46,56,79,84) D,(40,38,46,84,56,79)
27,在下面的排序方法中,辅助空间为O(n)的是( ) 。【南京理工大学 1999 一、17(1分)】
A.希尔排序 B,堆排序 C,选择排序 D,归并排序
28.下列排序算法中,在待排序数据已有序时,花费时间反而最多的是( )排序。
A,冒泡 B,希尔 C,快速 D,堆 【南京理工大学 2001 一、12 (1.5分)】
29.下列排序算法中,在每一趟都能选出一个元素放到其最终位置上,并且其时间性能受数据初始特性影响的是:( )。
A,直接插入排序 B,快速排序 C,直接选择排序 D,堆排序
30,对初始状态为递增序列的表按递增顺序排序,最省时间的是( )算法,最费时间的是( )算法。
A,堆排序 B,快速排序 C,插入排序 D,归并排序 【南开大学 2000 一、5】
31,就平均性能而言,目前最好的内排序方法是( )排序法。【西安电子科技大学 1998 一、9 (2分)】
A,冒泡 B,希尔插入 C,交换 D,快速
32.如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用( )方法最快。
A.起泡排序 B.快速排列 C.Shell排序 D.堆排序 E.简单选择排序
【清华大学 1998 一、2 (2分)】
类似本题的另外叙述有:
(1)设有5000个无序的元素,希望用最快的速度挑选出其中前十个最大的元素,在以下的排序方法中( )最好?为什么? 【山东工业大学 1995 二、4 (3分)】
A.快速排序 B.堆排序 C.归并排序 D.基数排序 E.SHELL排序
(2)数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用( )算法最节省时间。
A,堆排序 B,希尔排序 C,快速排序 D,直接选择排序 【北京理工大学 2000 一、5 (2分)】
(3)设有1000个无序的元素,希望用最快的速度挑选出其中前十个最大的元素,在以下的排序方法中采用哪一种最好? ( ) 【东北大学 1999 一、5 (3分)】
A,快速排序 B,归并排序 C,堆排序 D.基数排序 E.shell排序
33.在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是( )
A.直接插入排序 B.冒泡排序 C.简单选择排序 【山东工业大学 1995 二、1 (2分)】
类似本题的另外叙述有:
(1)在文件"局部有序"或文件长度较小的情况下,最佳内部排序的方法是( )。
A,直接插入排序 B,冒泡排序 C,简单选择排序 D,快速排序 【山东大学 2001 二,2 (1分)】
(2)在待排序的元素序列基本有序的前提下,效率最高的排序方法是( )。 【武汉大学 2000 二、6】
A.插入排序 B,选择排序 C,快速排序 D,归并排序
34.下列排序算法中,( )算法可能会出现下面情况:在最后一趟开始之前,所有元素都不在其最终的位置上。【南开大学 2000 一、4】 【西北大学 2001 二、1】
A,堆排序 B,冒泡排序 C,快速排序 D,插入排序
35,下列排序算法中,占用辅助空间最多的是:( ) 【厦门大学 2002 五、2 (8分)】
A,归并排序 B,快速排序 C,希尔排序 D,堆排序
36.从未排序序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在已排序序列的合适位置,该排序方法称为( )排序法。【北京航空航天大学 1999 一、8(2分)】
A,插入 B,选择 C,希尔 D,二路归并
37,在排序算法中,每次从未排序的记录中挑出最小(或最大)关键码字的记录,加入到已排序记录的末尾,该排序方法是( )。【中山大学 1999 一、11】
A,选择 B,冒泡 C,插入 D,堆
38.用直接插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是( )。
A,94,32,40,90,80,46,21,69 B,32,40,21,46,69,94,90,80
C,21,32,46,40,80,69,90,94 D,90,69,80,46,21,32,94,40
【北方交通大学 2001 一、15 (2分)】
39.直接插入排序在最好情况下的时间复杂度为( )【北京邮电大学 1999 一、5 (2分)】
A,O(logn) B,O(n) C,O(n*logn) D,O(n2)
40,若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小排序,需进行 ( )次比较。
A,3 B,10 C,15 D,25 【南京理工大学 1999 一、11(4分)】
类似本题的另外叙述有:
(1)若用冒泡排序对关键字序列{18,16,14,12,10,8},进行从小到大的排序,所需进行的关键字比较总次数是( ) 【北京工商大学 2001 一、4(3分)】
A,10 B,15 C,21 D,34
41,采用简单选择排序,比较次数与移动次数分别为( )。【南京理工大学 2000 一、18(1.5分)】
A,O(n),O(logn) B,O(logn),0(n*n) C,0(n*n),0(n) D,0(nlogn),0(n)
42,对序列{15,9,7,8,20,-1,4,} 用希尔排序方法排序,经一趟后序列变为{15,-l,4,8,20,9,7}则该次采用的增量是 ( ) 【南京理工大学 1999 一、15(1分)】
A,l B,4 C,3 D,2
43.对下列关键字序列用快速排序法进行排序时,速度最快的情形是( )。
A,{21,25,5,17,9,23,30} B.{25,23,30,17,21,5,9}
C,{21,9,17,30,25,23,5} D,{5,9,17,21,23,25,30}【北方交通大学 2001 一、18 (2分)】
44.对关键码序列28,16,32,12,60,2,5,72快速排序,从小到大一次划分结果为( )。
A,(2,5,12,16)26(60,32,72) B,(5,16,2,12)28(60,32,72)
C,(2,16,12,5)28(60,32,72) D,(5,16,2,12)28(32,60,72) 【青岛大学 2000 三、4 (2分)】
45.对n个记录的线性表进行快速排序为减少算法的递归深度,以下叙述正确的是( )
A.每次分区后,先处理较短的部分 B.每次分区后,先处理较长的部分
C.与算法每次分区后的处理顺序无关 D.以上三者都不对 【北方交通大学 2000 二、5 (2分)】
46.当n个整型数据是有序时,对这n个数据用快速排序算法排序,则时间复杂度是 ( 6 ),当用递归算法求n!时,算法的时间复杂度是 ( 7 ),则:(6)-(7)=( )【南京理工大学1999 一、(6-7)(4分)】
A,O(n) B,O(nlogn) C,O(n*n) D,O(logn)
47.快速排序在最坏情况下的时间复杂度是( ),比( )的性能差。
A.O(NlogN) B.O(N2) C.O(N3) D.堆排序E.冒泡排序F.选择排序
【山东工业大学 1995 二、2 (4分)】
48,快速排序方法在( )情况下最不利于发挥其长处。 【燕山大学 2001 一、3 (2分)】
A,要排序的数据量太大 B,要排序的数据中含有多个相同值
C,要排序的数据个数为奇数 D,要排序的数据已基本有序
49.在含有n个关键字的小根堆(堆顶元素最小)中,关键字最大的记录有可能存储在( )位置上。
A.(n/2( B.(n/2( -1 C.1 D.(n/2( +2 【中科院计算所2000 一、4(2分)】
50,以下序列不是堆的是( )。【西安电子科技大学 2001应用一、5 (2分)】
A,(100,85,98,77,80,60,82,40,20,10,66) B,(100,98,85,82,80,77,66,60,40,20,10)
C,(10,20,40,60,66,77,80,82,85,98,100) D,(100,85,40,77,80,60,66,98,82,10,20)
51.下列四个序列中,哪一个是堆( )。 【北京工商大学 2001 一、8 (3分)】
A,75,65,30,15,25,45,20,10 B,75,65,45,10,30,25,20,15
C,75,45,65,30,15,25,20,10 D,75,45,65,10,25,30,20,15
52,堆排序是( )类排序,堆排序平均执行的时间复杂度和需要附加的存储空间复杂度分别是()
A,插入 B,交换 C,归并 D,基数 E,选择
F,O(n2)和O(1) G,O(nlog2n)和O(1)
H,O(nlog2n)和O(n) I,O(n2)和O(n) 【西北大学 2001 二、2】
53.在对n个元素的序列进行排序时,堆排序所需要的附加存储空间是( )。
A,O(log2n) B,O(1) C,O(n) D,O(nlog2n) 【西安电子科技大学2001应用一、10(2分)】
54,对n 个记录的文件进行堆排序,最坏情况下的执行时间是多少?( )
A.O(log2n)B.O(n) C.O(nlog2n) D.O(n*n) 【北方交通大学 2001 一、9(2分)】
55,有一组数据(15,9,7,8,20,-1,7,4),用堆排序的筛选方法建立的初始堆为 ( )
A.-1,4,8,9,20,7,15,7 B.-1,7,15,7,4,8,20,9
C.-1,4,7,8,20,15,7,9 D.A,B,C均不对。 【南京理工大学 1996 二、5(2分)】
56,归并排序中,归并的趟数是( )。【南京理工大学 2000 一、19(1.5分)】
A.O(n) B.O(logn) C.O(nlogn) D.O(n*n)
类似本题的另外叙述有:
(1)归并排序的时间复杂性是( )。 【中山大学 1999 一、12】
A.O(N*N) B,O(N) C,O(N*LOG(N)) D,O(LOG(N))
57,在排序算法中每一项都与其它各项进行比较,计算出小于该项的项的个数,以确定该项的位置叫( )
A.插入排序 B.枚举排序 C.选择排序 D.交换排序【北京邮电大学 2000 二、6 (20/8分)】
58.就排序算法所用的辅助空间而言,堆排序,快速排序,归并排序的关系是 ( )
A.堆排序〈 快速排序〈归并排序 B.堆排序〈 归并排序〈 快速排序
C.堆排序〉 归并排序 〉快速排序 D.堆排序 > 快速排序 > 归并排序
E.以上答案都不对 【西安交通大学 1996 三、1 (3分)】
59.排序方法有许多种,(1)法从未排序的序列中依次取出元素,与已排序序列(初始时为空)中的元素作比较,将其放入已排序序列的正确位置上;(2)法从未排序的序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端; 交换排序方法是对序列中的元素进行一系列比较,当被比较的两元素逆序时,进行交换;(3)和(4)是基于这类方法的两种排序方法,而(4)是比(3)效率更高的方法;(5)法是基于选择排序的一种排序方法,是完全二叉树结构的一个重要应用。 【北方交通大学 1999 一、3 (5分)】
(1)--(5),A.选择排序 B.快速排序 C.插入排序 D.起泡排序
E.归并排序 F.shell排序 G.堆排序 H.基数排序类似本题的另外叙述有:
(1)排序的方法有很多种,( )法从未排序的序列中依次取出元素与已排序序列中的元素比较,将其放在已排序序列的正确位置上;( )法从未排序序列中挑选元素,并将其依次放入已排序序列的一端;交换排序法是对序列中的元素进行一系列比较,当被比较的两元素逆序时,进行交换。( )和( )是基于这类方法的两种排序方法,而 ( )是比( )效率更高的方法。供选择的答案:
A,快速排序 B,选择排序 C,归并排序 D.冒泡排序 E.直接插入排序
【山东大学 1998 三、2 (5分)】 【山东工业大学 2000 三、2 (7分)】
60.设要将序列(q,h,c,y,p,a,m,s,r,d,f,x) 中的关键码按字母升序重新排序,
(1)( )是初始步长为4的shell排序一趟扫描的结果; (2)( )是对排序初始建堆的结果;
(3)( )是以第一个元素为分界元素的快速一趟扫描的结果。
从下面供选择的答案中选出正确答案填入括号内。 【厦门大学 2000 六、3 (16%/3分)】
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
类似本题的另外叙述有:
(1)在内排序的过程中,通常需要对待排序的关键码进行多编扫描,采用不同重新排序方法,会产生不同的排序中间结果。设要将序列<Q,H,C,Y,P,A,M,S,R,D,F,X>中的关键码按字母序的升序排列,则( 1 )是冒泡排序一趟扫描的结果,( 2 )是初始步长为4的希尔(SHELL)排序一趟扫描的结果,( 3 ) 是合并排序一趟扫描的结果,( 4 )是以第一个元素为分界元素的快速排序一趟扫描的结果,( 5 )是堆排序初始建堆的结果。供选择的答案,【上海海运学院 1997 二、3 (5分)】
1-5: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
61.对由n个记录所组成的表按关键码排序时,下列各个常用排序算法的平均比较次数分别是:二路归并排序为( 1 ),直接插入排序为( 2 ),快速排序为( 3 ),其中,归并排序和快速排序所需要的辅助存储分别是( 4 )和( 5 )。 【上海海运学院 1998 二、4 (5分)】
1-5:A,O(1) B,O(nlog2n) C,O(n) D,O(n2) E,O(n(log2n)2) F,O(log2n)
62.将两个各有N个元素的有序表归并成一个有序表,其最少的比较次数是( )
A.N B.2N-1 C.2N D.N-1
【中科院计算所 1998 二、7 (2分)】 【中国科技大学 1998 二、7 (2分)】
63,基于比较方法的n个数据的内部排序。最坏情况下的时间复杂度能达到的最好下界是( )。
A,O(nlogn) B,O(logn) C,O(n) D,O(n*n) 【南京理工大学 1996 一、2 (2分)】
64.已知待排序的n个元素可分为n/k个组,每个组包含k个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界应为( )。
A,O(nlog2n) B,O(nlog2k) C,O(klog2n) D,O(klog2k) 【中国科技大学 1998 二、9 (2分)】
类似本题的另外叙述有:
(1)已知待排序的N个元素可分为N/K个组,每个组包含K个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界应为( )
A,O(klog2k) B,O(klog2n) C,O(nlog2k) D,O(nlog2n) 【中科院计算所 1998 二、9 (2分)】
65.采用败者树进行k路平衡归并的外部排序算法,其总的归并效率与k ( )
A,有关 B.无关 【北京工业大学 2000 一,2 (3分)】
66.采用败者树进行K路平衡归并时,总的(包括访外)归并效率与K( )。
A.有关 B.无关 【北京工业大学 2001 一、4 (2分)】
二、判断题:
1.当待排序的元素很大时,为了交换元素的位置,移动元素要占用较多的时间,这是影响时间复杂度的主要因素。( )【长沙铁道学院 1998 一、10 (1分)】
2.内排序要求数据一定要以顺序方式存储。 ( )【南京理工大学 1997 二、2(2分)】
3.排序算法中的比较次数与初始元素序列的排列无关。()【南京航空航天大学 1997 一、8 (1分)】
4.排序的稳定性是指排序算法中的比较次数保持不变,且算法能够终止。( )
【南京航空航天大学 1996 六、9 (1分)】
5.在执行某个排序算法过程中,出现了排序码朝着最终排序序列位置相反方向移动,则该算法是不稳定的。( )【上海交通大学 1998 一、18】
6.直接选择排序算法在最好情况下的时间复杂度为O(N)。( )【合肥工业大学 2001 二、10(1分)】
7.两分法插入排序所需比较次数与待排序记录的初始排列状态相关。()【上海交通大学 1998 一、15】
8.在初始数据表已经有序时,快速排序算法的时间复杂度为O(nlog2n )。( )
【合肥工业大学 2000 二、9(1分)】
9.在待排数据基本有序的情况下,快速排序效果最好。( )【南京理工大学 1997 二、4(2分)】
10.当待排序记录已经从小到大排序或者已经从大到小排序时,快速排序的执行时间最省。( )
【上海交通大学 1998 一、16】
11.快速排序的速度在所有排序方法中为最快,而且所需附加空间也最少。( )
【北京邮电大学 1998 一、7 (2分)】
12.堆肯定是一棵平衡二叉树。( )【南京航空航天大学 1997 一、6 (1分)】
13.堆是满二叉树。( )【南京航空航天大学 1996 六、6 (1分)】
14.(101,88,46,70,34,39,45,58,66,10)是堆。( )【北京邮电大学 1999 二、1 (2分)】
15.在用堆排序算法排序时,如果要进行增序排序,则需要采用“大根堆”。( )
【合肥工业大学 2000 二、10(1分)】
16.堆排序是稳定的排序方法。( )【上海交通大学 1998 一、19】
17.归并排序辅助存储为O(1)。( )【青岛大学 2000 四、9(1分)】
18.在分配排序时,最高位优先分配法比最低位优先分配法简单。( )【上海交通大学 1998 一、20】
19,冒泡排序和快速排序都是基于交换两个逆序元素的排序方法,冒泡排序算法的最坏时间复杂性是O(n*n),而快速排序算法的最坏时间复杂性是O(nlog2n),所以快速排序比冒泡排序算法效率更高。 ( )
【上海海运学院 1997 一、9(1分)】
20.交换排序法是对序列中的元素进行一系列比较,当被比较的两个元素逆序时,进行交换,冒泡排序和快速排序是基于这类方法的两种排序方法,冒泡排序算法的最坏时间复杂性是O(n*n),而快速排序算法的最坏时间复杂性是O(nlog2n);所以快速排序比冒泡排序效率更高。( )
【上海海运学院 1998 一、10 (1分)】【上海海运学院 1995 一、10(1分)】
21.快速排序和归并排序在最坏情况下的比较次数都是O(nlog2n)。( )
【上海海运学院1996一、9(1分)】
22.在任何情况下,归并排序都比简单插入排序快。( )【北京邮电大学 2000 一、4 (1分)】
23.归并排序在任何情况下都比所有简单排序速度快。( )【北京邮电大学 2002 一、9(1分)】
24.快速排序总比简单排序快。( )【东南大学 2001 一、9 (1分)】
25,中序周游(遍历)平衡的二叉排序树,可得到最好排序的关键码序列。( )
【中山大学 1994 一、4 (2分)】
26.外部排序是把外存文件调入内存,可利用内部排序的方法进行排序,因此排序所花的时间取决于内部排序的时间。( )【北京邮电大学 1998 一、8 (2分)】
27.在外部排序时,利用选择树方法在能容纳m个记录的内存缓冲区中产生的初始归并段的平均长度为2m个记录。( )【上海海运学院 1999 一、10(1分)】
28.为提高在外排序过程中,对长度为N的初始序列进行“置换—选择”排序时,可以得到的最大初始有序段的长度不超过N/2。( )
29.排序速度,进行外排序时,必须选用最快的内排序算法。( )
30.在完成外排序过程中,每个记录的I/O次数必定相等。( )【大连海事大学 2001 一、20 (每题1分)】
31.影响外排序的时间因素主要是内存与外设交换信息的总次数。( )【东北大学 1997 二、5 (2分)】
三、填空题
1.若不考虑基数排序,则在排序过程中,主要进行的两种基本操作是关键字的______和记录的_____。
【北京邮电大学 2001 二、7 (4分)】
2,外排序的基本操作过程是_______和_______。【西安电子科技大学 1998 二、3 (3分)】
类似本题的另外叙述有:
(1)外部排序中两个相对独立的阶段是___和___。【西安电子科技大学 1999软件 一、8 (2分)】
3,属于不稳定排序的有__________。【青岛大学 2002 三、5 (2分)】
4.分别采用堆排序,快速排序,冒泡排序和归并排序,对初态为有序的表,则最省时间的是_____算法,最费时间的是______算法。【福州大学 1998 二、10 (2分)】
类似本题的另外叙述有:
(1)设表中元素的初始状态是按健值递增的,分别用堆排序,快速排序,冒泡排序和归并排序方法对其进行排序(按递增顺序),__排序最省时间,__排序最费时间。【厦门大学 2001 一、5 (14%/5分)】
5,不受待排序初始序列的影响,时间复杂度为O(N2)的排序算法是_____,在排序算法的最后一趟开始之前,所有元素都可能不在其最终位置上的排序算法是_____。【中国人民大学 2001 一、3 (2分)】
6.直接插入排序用监视哨的作用是_______。【南京理工大学 2001 二、8 (2分)】
7.对n个记录的表r[1..n]进行简单选择排序,所需进行的关键字间的比较次数为_______。
【华中理工大学 2000 一、10 (1分)】
8,用链表表示的数据的简单选择排序,结点的域为数据域data,指针域 next ;链表首指针为head,链表无头结点。
selectsort(head)
p=head;
while (p(1)_______)
{q=p; r=(2)_______
while((3)______ )
{if ((4)_______ ) q=r;
r=(5)_______ ;
}
tmp=q->data; q->data=p->data; p->data=tmp; p= (6)_______ ;
} 【南京理工大学 2000 三、2 (6分)】
9.下面的c函数实现对链表head进行选择排序的算法,排序完毕,链表中的结点按结点值从小到大链接。请在空框处填上适当内容,每个空框只填一个语句或一个表达式:
#include <stdio.h>
typedef struct node {char data; struct node *link; }node;
node *select(node *head)
{node *p,*q,*r,*s;
p=(node *)malloc(sizeof(node));
p->link=head; head=p;
while(p->link!=null)
{q=p->link; r=p;
while ((1)____)
{ if (q->link->data<r->link->data) r=q;
q=q->link;
}
if ((2)____) {s=r->link; r->link=s->link; s->link= ((3)_____); ((4)_____);}
((5)____) ;
}
p=head; head=head->link; free(p); return(head);
} 【复旦大学 1999 六(15分)】
10.下面的排序算法的思想是:第一趟比较将最小的元素放在r[1]中,最大的元素放在r[n]中,第二趟比较将次小的放在r[2]中,将次大的放在r[n-1]中,…,依次下去,直到待排序列为递增序。(注:<-->)代表两个变量的数据交换)。
void sort(SqList &r,int n) {
i=1;
while((1)__) {
min=max=1;
for (j=i+1;(2)____ ;++j)
{if((3)____) min=j; else if(r[j].key>r[max].key) max=j; }
if((4)_____) r[min] < ---- >r[j];
if(max!=n-i+1){if ((5)___) r[min] < ---- > r[n-i+1]; else ((6)__); }
i++;
}
}//sort 【南京理工大学 2001 三、2 (10分)】
11.表插入排序的基本思想是在结点中设一指针字段,插入Ri时Rl到Ri-1己经用指针按排序码不减次序链结起夹,这时采用顺序比较的方法找到Ri应插入的位置,做链表插入。如此反复,直到把Rn插入为止。
(1)(6分)请完成下列表插人的算法;【山东工业大学 2000 五(16分)】 【山东大学 1998 五】
①,R[0].LINK←(1)___; R[N].LINK←(2)___;
②,循环,I以-1为步长,从(3)___到(4)___执行
(1)P← R[0].LINK; Q← 0
(2)循环,当P>0且(5)__ 时,反复执行
Q←P; P←(6)___
(3)R[Q].LINK←I; R[I].LINK←P
(2)(2分) 表插入排序的最大比较次数是(7)__;
(3)(2分)表插入排序的最小比较次数是(8)__;
(4)(2分)记录移动的次数是(9)__;
(5)(2分)需要附加的存储空间是(10)__;
(6)(2分)该排序算法是否是稳定的(11)____。
12,设用希尔排序对数组{98,36,-9,0,47,23,1,8,10,7}进行排序,给出的步长(也称增量序列)依次是4,2,1则排序需__________趟,写出第一趟结束后,数组中数据的排列次序__________。
【南京理工大学 1997 三、5 (2分)】
13.从平均时间性能而言,__________排序最佳。【青岛大学 2001 六、5 (3分)】
14.对于7个元素的集合{1,2,3,4,5,6,7}进行快速排序,具有最小比较和交换次数的初始排列次序为_____。【长沙铁道学院 1997 二、1 (2分)】
15.快速排序在_____的情况下最易发挥其长处。【长沙铁道学院 1998 二、5 (2分)】
类似本题的另外叙述有:
(1)快速排序法在_____情况下最不利于发挥其长处,在_____情况下最易发挥其长处。
【山东大学 2001 三、5 (2分)】
16.在数据表有序时,快速排序算法的时间复杂度是____。【合肥工业大学 2001 三、10 (2分)】
17.堆排序的算法时间复杂度为:_____。【合肥工业大学 1999 三、10 (2分)】
18.PROC sift(VAR r:listtype;k,m:integer);
{假设r[k+1..m]中各元素满足堆的性质,本算法调整r[k]使整个序列r[k..m]中各元素满足堆的性质。}
i:=k; j:= (1)__; x:=r[k].key; finished:=false; t:=r[k];
WHILE (j<=m) AND NOT finished DO
[IF(j<m) AND ((2)__) THEN j:=j+1;
IF x<=r[j].key THEN finished:=(3)__
ELSE [r[i]:= (4)___; i:=j; j:= (5)____]
];
r[i]:=t;
ENDP;{sift} 【燕山大学 1998 四、2 (15分)】
19.设n为结点个数,datatype为结点信息类型。为了进行堆排序,定义:
TYPE node=RECORD key:integer;info:datatype END;
VAR heap:ARRAY[1..n] OF node
l,r,i,j:0..n ;x:node;
在下面的算法描述中填入正确的内容,使其实现1964年Floyd提出的建堆筛选法,要求堆建成后便找到了最小的关键码。
筛选算法sift(l,r,heap):
步1.[准备] i←l; j ←(1)___; x←heap[i]
步2.[过筛] 循环:当(2)____时反复执行
⑴.若j<r且 heap[j].key>heap[j+1].key 则(3)____
⑵.若(4)___则heap[i]←heap[j]; (5)____; (6)____ 否则跳出循环
步3.[结束]
heap[i] ← (7)____ 【山东工业大学 1996 三、2 (7分)】
20.以下程序的功能是利用堆进行排序。请在空白处填上适当语句,使程序完整。
PROCEDURE sift(VAR r:arr;k,m:integer);
VAR i,j,x:integer; t:rec; finished:boolean;
BEGIN
i:=k; (1)___; x:=r[i].key; (2)___;
t:=r[k];
WHILE (j<=m) AND NOT finished DO
BEGIN IF (j<m) AND (3)____THEN j:=j+1;
IF x<=r[j].key THEN finished:=true
ELSE BEGIN(4)____; (5)____; (6)____END;
END;
(7)___
END;
PROCEDURE heapsort(VAR r:arr);
VAR i:integer; x:rec;
BEGIN FOR i:=n DIV 2 DOWNTO 1 DO (8)___;
FOR i:=n DOWNTO 2 DO
BEGIN x:=r[1]; (9)___; r[i]:=x; (10)___ END;
END; 【北方交通大学 2000 四 (20分)】
21.堆是一种有用的数据结构。试判断下面的关键码序列中哪一个是堆__________。
①16,72,31,23,94,53 ②94,53,31,72,16,23 ③16,53,23,94,31,72
④16,31,23,94,53,72 ⑤94,31,53,23,16,72
堆排序是一种_(1)_类型的排序,它的一个基本问题是如何建堆,常用的建堆算法是1964年Floyd提出的_(2)_,对含有n个元素的序列进行排序时,堆排序的时间复杂度是_(3)_,所需要的附加结点是_(4)_。
【山东工业大学 1994 一、2 (5分)】
22.堆是一种有用的数据结构,堆排序是一种_(1)_排序,堆实质上是一棵_(2)_结点的层次序列。对含有N个元素的序列进行排序时,堆排序的时间复杂度是_(3)_,所需的附加存储结点是_(4)_。关键码序列05,23,16,68,94,72,71,73是否满足堆的性质_(5)_。 【山东工业大学 1996 三、1 (5分)】
23.将如下的堆排序算法补写完整。说明如下:
TYPE heaptype=ARRAY[1..n]OF integer;
过程heapsort的功能是将数组h中的前n个记录按关键字递减的次序排序。heapsort调用过程sift时的参数h,k,r有如下定义:以 h[k+1],h[k+2],…,h[r]为根的子树已经是堆;执行sift后,以h[k],h[k+1],h[k+2],…,h[r] 为根的子树都成为堆。
PROC sift(VAR h:heaptype;k,r:integer);
VAR i,j,x:integer;finish:boolean;
BEGIN i:=k;x:=h[i];j:=2*j;
((1)____);
WHILE (j<=r) AND NOT finish DO
[IF (j<r) AND (h[j]>h[j+1]) THEN j:=j+1;
IF x>h[j] THEN [(2)____ ]
ELSE finish:=true;
(3)____ ]
END;
PROC heapsort(VAR h:heaptype; n:integer);
VAR k,r,i,j:integer;
BEGIN
FOR k:=n DIV 2 DOWNTO 1 DO
sift ((4)____) ;
FOR r:=n DOWNTO 2 DO
[x:=h[1]; h[1]:=h[r]; h[r]:=x; ((5)____) ]
END; 【北京工业大学 1997 五、2 (16分)】
24.设有字母序列{Q,D,F,X,A,P,N,B,Y,M,C,W},请写出按2路归并排序方法对该序列进行一趟扫描后的结果_______。 【北方交通大学 2001 二、7】
25,阅读下列程序说明和PASCAL程序,把应填入其中______处的字句写在答题纸上。程序说明:
本题给出的是将数组a的元素a1,a2,…,an从大到小排序的子程序。子程序采用改进的选择排序方法,该方法基于以下思想:
在选择第一大元过程中,a1与aj(j=n,n-1,…,2)逐个比较,若发现aj1>a1,则aj1与a1变换,变换后新的aj1有性质aj1≥at(j1<t≤n),若再有aj2>a1 (j2<j1),aj2与a1交换,则交换后的aj2也有性质aj2≥at(j2<t≤n)。如在挑选第一大元过程中,与a1交换的元素有k(k≥0)个,依次为aj1,aj2,…,ajk,则它们都满足这一性质,它们的下标满足n≥j1>j2>…>jk>1。有了这些下标,在确定第二大元时,可只考虑a2与aj (j=jk,jk-1,…,3) 逐个比较。倘若jk=2,则可不经比较就知道它是第二大元。在选择第二大元过程中,将与a2交换过的元素下标也标记下来,可供选择其他大元使用,但在选择第二大元时,应保证与a2交换的那些位置上的新值也都满足上述性质,依次类推,顺序选择第一,第二,…,第n-1大元,实现对a的排序。
设程序包含有常量和类型定义:
CONST maxn=1000;
TYPE vector=ARRAY[1..maxn] OF integer;
index= 1..maxn;
PROCEDURE sort(VAR a:vector;n:index)
VAR p:vector; i,j,k,m,t:integer;
BEGIN
k:=0; i:=1; m:=n;
WHILE i<n DO
BEGIN
FOR j:=m DOWNTO i+1 DO
IF a[i]<a[j] THEN
BEGIN t:=a[i]; a[i]:=a[j]; a[j]:=t; k:=k+1;((1)____)END;
REPEAT((2)____);
IF((3)____)THEN((4)____)
ELSE BEGIN m:=p[k]; k:=k-1; END;
UNTIL (i<m) OR (i=n);
IF ((5)___)
BEGIN t:=a[i];((6)____);((7)____)END
END
END; 【上海海运学院 1997 七(14分)】
26.下列算法为奇偶交换排序,思路如下:第一趟对所有奇数的i,将a[i]和a[i+1]进行比较,第二趟对所有偶数的i,将a[i]和a[i+1]进行比较,每次比较时若a[i]>a[i+1],将二者交换;以后重复上述二趟过程,直至整个数组有序。
程序.(a)
PROCEDURE oesort(VAR a:ARRAY[1..n] OF integer);
VAR flag:boolean; i,t:integer;
BEGIN
REPEAT
flag:=false;
FOR i:=1 TO n step 2 DO
IF(a[i]>a[i+1]) THEN
[flag:= (1)____; t:=a[i+1]; a[i+1]:=a[i]; (2)____]
FOR i:= (3)____ DO
IF (a[i]>a[i+1]) THEN
[flag:= (4)____ ; t:=a[i+1];a[i+1]:=a[i]; a[i]:=t;]
UNTIL (5)___ ;
END;
程序(b)
void oesort (int a[n])
{int flag,i,t;
do {flag=0;
for(i=1;i<n;i++,i++)
if(a[i]>a[i+1])
{flag=(1)__; t=a[i+1]; a[i+1]=a[i]; (2)____;}
for (3)____
if (a[i]>a[i+1])
{flag=(4)____;t=a[i+1]; a[i+1]=a[i]; a[i]=t;}
}while (5)_;
} 【上海大学 2000 一、1 (10分)】
27.关键码序列( Q,H,C,Y,Q,A,M,S,R,D,F,X),要按照关键码值递增的次序进行排序,若采用初始步长为4的Shell排序法,则一趟扫描的结果是_____;若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是______。 【北京大学 1997 一、4 (4分)】
类似本题的另外叙述有:
(1)设有字符序列Q、H、C、Y、P、A、M、S、R、D、F、X要求按字符升序排序,采用初始步长为4的希尔(shell)排序,一趟扫描的结果是____;采用以首元素为分界元素的快速排序,一趟扫描的结果是_____。
【北京工业大学 1999 一、7 (8分)】
28.外部排序的基本方法是归并排序,但在之前必须先生成___。【北京邮电大学2001 二、6(2分)】
29.磁盘排序过程主要是先生成,然后对 合并,而提高排序速度很重要的是,我们将采用 方法来提高排序速度。 【山东工业大学 1995 一、4(4分)】
30.设输入的关键字满足k1>k2>…>kn,缓冲区大小为m,用置换-选择排序方法可产生____个初始归并段。
【武汉大学 2000 一、9】
31.下面是一改进了的快速排序算法,请填空并简要说明支持improveqsort递归所需要的最大栈空间用量。
PROCEDURE improveqsort(VAR list:afile;m,n:integer);
{设list[m].key<=list[n+1].key}
VAR i,j,k:integer;
BEGIN
WHILE m<n DO
BEGIN
i:=m; j:=n+1; k:=list[m].key;
REPEAT
REPEAT i:=i+1 UNTIL list[i].key>=k;
REPEAT j:=j-1 UNTIL list[j].key<=k;
IF i<j THEN interchange(list[i],list[j]);
UNTIL i>=j;
interchange(list[m],list[j]);
IF n-j>=j-m
THEN BEGIN
improveqsort(list,(1)____); (2)____;
END
ELSE BEGIN
improveqsort(list,(3)____); (4)____;
END
END; {OF WHILE}
END; 【东南大学 2001 五(10分)】
四、应用题
1,内部排序(名词解释)。 【燕山大学 1999 一、5 (2分)】
2,在各种排序方法中,哪些是稳定的?哪些是不稳定的?并为每一种不稳定的排序方法举出一个不稳定的实例。【大连海事大学 1996 七、3 (4分)】
类似本题的另外叙述有:
(1) 举例说明堆排序是否为稳定排序法,【西安电子科技大学 1996 三、4 (5分)】
(2) 选择排序算法是否稳定?为什么? 【燕山大学 2001 三、3 (5分)】
(3) 举例分析堆排序方法是否稳定。 【北京邮电大学 1993 二、3 (6分)】
(4) 堆排序是稳定排序吗?举例说明。 【东南大学 1996 一、5 (6分)】
(5) 试举例分析堆排序法是否稳定。 【东南大学 1999 一、5 (5分)】
(6) 树型选择排序通常采用顺序存储结构,①试指出n个元素的原始序列一般如何在该存储结构中存放(起始存储位置,次序),请说明理由。②讨论树形选择排序的稳定性。若稳定,须说明理由;不稳定,须举反例,并尝试找出使它稳定的方法。【北京工业大学 1999 七 (10分)】
3.在执行某种排序算法的过程中出现了排序码朝着最终排序序列相反的方向移动,从而认为该排序算法是不稳定的,这种说法对吗?为什么? 【燕山大学 2001 三、4 (5分)】
4.设有5个互不相同的元素a、b、c、d、e,能否通过7次比较就将其排好序?如果能,请列出其比较过程;如果不能,则说明原因。 【北方交通大学 1996 五(10分)】
5.对一个由n个关键字不同的记录构成的序列,能否用比2n-3少的次数选出该序列中关键字取最大值和关键字取最小值的记录?请说明如何实现?在最坏的情况下至少进行多少次比较?
【东南大学 2000 一、5 (8分)】
6.利用比较的方法进行排序,在最坏的情况下,能达到的最好时间复杂性是什么?请给出详细证明。
【上海交通大学 2000 六 (8分)】
7.以下概念的区别:拓扑排序与冒泡排序。 【大连海事大学 1996 三,2(3) (2分)】
8.简述直接插入排序,简单选择排序,2-路归并排序的基本思想以及在时间复杂度和排序稳定性上的差别。
【西北工业大学 1999 二 (8分)】
9.快速排序,堆排序和希尔排序是时间性能较好的排序方法,也是稳定的排序方法。判断正误并改错。
【燕山大学 1998 二、5 (2分)】
10,设LS是一个线性表,LS=(a1,a2,…,an),若采用顺序存储结构,则在等概率的前提下,插入一个元素需要平均移动的元素个数是多少?若元素插在ai与ai+1之间(0<=i<=n-1)的概率为(n-i)/(n*(n+1)/2),则插入一个元素需要平均移动的元素个数又是多少?【西安电子科技大学 2001软件 二、3 (5分)】
11.对于堆积排序法,快速排序法和归并排序法,若仅从节省存储空间考虑,则应该首先选取其中哪种方法?其次选取哪种方法?若仅考虑排序结果的稳定性,则应该选取其中哪种方法?若仅从平均情况下排序最快这一点考虑,则应该选取其中哪些方法?【北京航空航天大学 1998 一、10 (4分)】
12,在堆排序、快速排序和合并排序中,【吉林大学 2001 一、5 (6分)】
(1).若只从存储空间考虑,则应首先选取哪种排序方法,其次选取哪种排序方法,最后选取哪种排序方法?
(2).若只从排序结果的稳定性考虑,则应选取哪种排序方法?
(3).若只从平均情况下排序最快考虑,则应选取哪种排序方法?
(4).若只从最坏情况下排序最快并且要节省内存考虑,则应选取哪种排序方法?
13,快排序、堆排序、合并排序、Shell排序中哪种排序平均比较次数最少,哪种排序占用空间最多,哪几种排序算法是不稳定的? 【首都经贸大学 1997 一、3 (4分)】
14.欲求前k个最大元素,用什么分类方法好?为什么?什么是稳定分类?分别指出下列算法是否是稳定分类算法,或易于改成稳定分类算法? A,插入分类 B.快速分类 C.合并分类 D.堆分类 E.基数分类【东南大学 1994 一、3 (8分)】
15.考虑由三个不同关键词构成的序列:{a,b,c},试画出直接插入排序算法的二叉判定树。
【吉林大学 2001 一、3 (4分)】
16,请阅读下列算法,回答问题
PROCEDURE sort(r,n)
BEGIN
FOR i:=2 TO n DO
BEGIN
x:=r(i);r(O):=x;j:=i-1;
WHILE x.key<r(j).key DO
BEGIN
r(j+1):=r(j); j:=j-1
END;
r(j+1):=x
END
END;
问题一:这是什么类型的排序算法,该排序算法稳定吗?
问题二:设置r(O)的作用是什么?若将WHILE—DO 语句中判断条件改为x.key<=r(j).KEY,该算法将会有什么变化,是否还能正确工作?【上海海运学院 1998 六 (10分)】
17.下面是冒泡排序算法,请阅读并完成该程序,并回答以下问题:
PROCEDURE bubblesort (r,n)
BEGIN
i:=1; m:=n-1; flag:=1;
WHILE (i<=(1)___)AND(flag=(2)____) DO
BEGIN
flag:= (3)___;
FOR j:=1 TO m DO
IF r[j].key>r[j+1].key THEN
BEGIN flag:= (4)___; t:=r[j]; r[j]:=r[j+1]; r[j+1]:=t
END;
i:=i+1;m:=m-1
END;
END,
(1) 请在上面横线上填上适当的语句,完成该算法程序。
(2) 设计标志flag的作用是什么?
(3) 该算法结点的最大比较次数和最大移动次数是多少?
(4) 该分类算法稳定吗? 【上海海运学院 1996 六(12分) 1999 六(16分)】
18.仔细阅读下面的过程,并回答有关的问题
PROCEDURE unknownname(VAR A:array[1..500] OF integer;n:integer);
VAR i,j,x:integer; b:boolean;
BEGIN
b:=true; i:=1;
WHILE (i<n) AND b DO
BEGIN
b:=false;
FOR j:=1 TO(1)___DO
IF(2)___
THEN BEGIN
x:=A[j]; A[j]:=A[j+1]; A[j+1]:=x; (3)___
END;
i:=i+1;
END
END; 【西安电子科技大学 2001计应用 六 (14分)】
(1) 在 中填上正确的语句,使该过程能完成预期的功能。
(2) 该过程使用的是什么排序方法?
(3) 当数组A的元素初始时已按值递增排序,该过程执行中会进行多少次比较?多少次交换?
(4) 当数组A的元素初始时已按值递减排序,该过程执行中会进行多少次比较?多少次交换?
19.写出下列排序算法的基本思想,并写出对序列(23,12,35,47,16,25,36,19,21,16)进行排序时每一趟的结果。
PROC bbsort(VAR r,sequence; n,integer);
{r是一个数组}
d:=1; pos[-1]:=1; pos[1]:=n; i:=1; exchanged:= true;
WHILE exchanged DO
[ exchanged:= false;
WHILE i<>pos[d] DO
[IF (r[i]-r[i+d])*d>0 THEN [r[i]与r[i+d]交换; exchanged:=true;];
i:=i+d;
]
pos[d]:=pos[d]-d; i:=pos[d]; d:=-d;
]
ENDP; 【山东科技大学 2002 五 (12分)】
20.设要求从大到小排序。问在什么情况下冒泡排序算法关键字交换的次数为最大。
【南京航空航天大学 1996 九、1 (4分)】
21.设与记录R1,R2,…,Rn对应的关键词分别是K1,K2,…,Kn。如果存在Ri和Rj使得j<i且Ki<Kj成立,试证明经过一趟起泡后,一定有记录与Ri进 行交换,【吉林大学 1996 四、3 】
22.现有一文件F含有1000个记录,其中只有少量记录次序不对,且它们距离正确位置不远;如果以比较和移动次数作为度量,那末将其排序最好采用什么方法?为什么?【北方交通大学 1997 四(8分)】
23.分析下面排序算法中各带标号语句的频度及此算法的时间复杂度,并指出该算法是属于哪一种排序方法。 【北京邮电大学 1996 一、2 (7分)】
PROCEDURE sort (VAR a,ARRAY [1..n] OF integer);
BEGIN
1 FOR i:=1 TO n-1 DO
2 [j:=i;
3 FOR k:=j+1 TO n DO
4 IF a[k]<a[j] THEN j:=k;
5 t:=a[i]; a[i]:=a[j]; a[j];=t
]
END;
24,设待排序的关键码分别为28,13,72,85,39,41,6,20。按二分法插入排序算法已使前七个记录有序,中间结果如下,【山东工业大学 1996 七 (10分)】
6 13 28 39 41 72 85 20
i=1 m=4 r=7
试在此基础上,沿用上述表达方式,给出继续采用二分法插入第八个记录的比较过程。
(1) 使用二分法插入排序所要进行的比较次数,是否与待排序的记录的初始状态有关?
(2) 在一些特殊情况下,二分法插入排序比直接插入排序要执行更多的比较。这句话对吗?
25.算法模拟(15分,问题1,2各6分,问题3占3分)
设待排序的记录共7个,排序码分别为8,3,2,5,9,1,6。
(1) 用直接插入排序。试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序。
(2) 用直接选择排序。试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序。
(3) 直接插入排序算法和直接选择排序算法的稳定性如何?【山东工业大学 1997 四 (15分)】
26.在执行某个排序算法过程中,出现了排序关键字朝着最终排序序列相反的方向的移动,从而认为该算法是不稳定的。这种说法对么?为什么? 【东北大学 2001 一、1( 4分)】
类似本题的另外叙述有:
(1) (冒泡)排序过程中,有的关键字在某趟排序中可能朝着与最终排序相反的方向移动,试举例说明之。快速排序过程中有没有这种现象? 【东北大学 2000 一,5 (4分)】
27,对下面数据表,写出采用SHELL排序算法排序的每一趟的结果,并标出数据移动情况。(125,11,22,34,15,44,76,66,100,8,14,20,2,5,1)。【合肥工业大学 1999 四、4 (5分)】
28.快速排序的最大递归深度是多少?最小递归深度是多少?【清华大学 1999 一、1 (2分)】
29,已知某文件的记录关键字集为{50,10,50,40,45,85,80},选择一种从平均性能而言是最佳的排序方法进行排序,且说明其稳定性。【西安电子科技大学 1996 五 (10分)】
30,在内排序算法中,待排序的数据已基本有序时,花费时间反而最多的排序方法是哪种?
【西安电子科技大学 2000计应用 一、1 (5分)】
31.我们知道,对于n个元素组成的线性表进行快速排序时,所需进行的比较次数与这n个元素的初始排序有关。问,【西安电子科技大学 2001计应用 五(12分)】【中国矿业大学 2000 六 (10分)】
(1) 当n=7时,在最好情况下需进行多少次比较?请说明理由。
(2) 当n=7时,给出一个最好情况的初始排序的实例。
(3) 当n=7时,在最坏情况下需进行多少次比较?请说明理由。
(4) 当n=7时,给出一个最坏情况的初始排序的实例。
类似本题的另外叙述有:
(1) 快速排序(quick sorting)的效率与原始序列有关,现用快速排序算法对关键字分别为1—15的15 个元素进行排序
① 在最好情况下要进行几遍比较,给出一种原始序列实例;
② 在最坏情况下要进行几遍比较,给出一种原始序列实例。【浙江大学 1995 七(12分)】
(2) 对N个元素组成的线性表进行快速排序时,所需进行的比较次数依赖于这N个元素的初始排列。对N=7,给出快速排序的一个最好情况的初始排列实例(7个元素可取自集合{l,2,3,4,5,6,7})。
【西北大学 2000 二、5(5分)】
32.有一随机数组(25,84,21,46,13,27,68,35,20),现采用某种方法对它们进行排序,其每趟排序结果如下,则该排序方法是什么? 【武汉交通科技大学 1996 二、5 (6分)】
初 始:25,84,21,46,13,27,68,35,20 第一趟:20,13,21,25,46,27,68,35,84
第二趟:13,20,21,25,35,27,46,68,84 第三趟:13,20,21,25,27,35,46,68,84
33.快速排序是在所有情况下,排序速度最快吗?为什么?在何种情况下使用此排序法最好?
【北京邮电大学 1993 一、1 (5分)】
34.对给定文件(28,07,39,10,65,14,61,17,50,21)选择第一个元素28进行划分,写出其快速排序第一遍的排序过程。【厦门大学 1998 七、1 (8分)】
类似本题的另外叙述有:
(1) 对下列关键字序列进行快速排序(从小至大) (48,38,65,95,73,13,27,50)要求给出快速排序的算法思想,并画出排序过程示意图。 【南京航空航天大学 1999 五 (10分)】
(2) 设记录的关键字集合K={23,9,39,5,68,12,62,48,33},给定的增量序列D={4,2,1},请写出对K按“SHELL方法”排序时各趟排序结束时的结果;若每次以表的第一元素为基准(或枢轴),写出对K按“快速排序方法”排序时,各趟排序结束时的结果。
【北京科技大学 1999 七(10分) 2000 七(10分)】
35.下面是一改进了的快速分类算法
1,PROCEDURE qsort1(VAR list:afile;m,n:integer);
2 (设list[m].key<list[n+1].key)
3 VAR i,j,k:integer;
4 BEGIN
5 WHILE m<n DO
6 BEGIN
7 i:=m;j:=n+1; k:=list[m].key;
8 REPEAT
9 REPEAT i:=i+1 UNTIL list[i].key>=k;
10 REPEAT j:=j-1 UNTIL list[j].key<=k;
11 IF i<j THEN interchange (list[i],list[j]);
12 UNTIL i>=j;
13 interchange( list[m],list[j]);
14 IF n-j>=j-m
15 THEN BEGIN qsort1(list,m,j+1);m:=j+1;END
16 ELSE BEGIN qsort1(list,j+1,n);n:=j-1;END
17 END;(OF WHILE)
18 END.
问,
(1) 将第9、10行中的>=,<=分别改成>,<行吗?为什么? (5分)
(2) 该排序算法稳定否?举例说明 (5分)
(3) 对输入文件(22,3,30,4,60,11,58,18,40,16),列表表示该文件在每次调用qsort1时的状态及相应m、n值。(5分)
(4) 若输入文件有n个记录,简要说明支持qsort1递归所需最大栈空间用量(设一层递归用一个单位栈空间)。(5分) 【东南大学 1998 四 (20分)】
36.如果只要找出一个具有n个元素的集合的第k(1≤k≤n)个最小元素,你所学过的排序方法中哪种最适合?给出实现的思想。【北方交通大学 1998 六 (10分)】
37.已知快速排序和归并排序的算法分别如下所示:
PROCEDURE qksort(VAR r:listtype; s,t:integer);
BEGIN
IF s<t THEN BEGIN
qkpass(r,s,t,k);
qksort(r,s,k-1);
qksortd(r,k+1,t)
END
END;
PROCEDURE mergesort(VAR r,r1:listtype;s,t:integer);
BEGIN
IF s=t THEN r1[s]:=r[s] ELSE
BEGIN
MERGESORT(r,r2,s,(s+t)DIV 2);
MERGESORT(r,r2,(S+t)DIV 2+1,t);
MERGE(r2,s,(s+t)DIV 2,t,rl)
END
END;
若对下列关键字序列进行快速排序和归并排序,分别写出三次调用过程qkpass和过程merge后的结果。
(98,36,77,42,23,65,84,10,59,37,61,18)。 【清华大学 1996 六 】
38.已知一关键码序列为:3,87,12,61,70,97,26,45。试根据堆排序原理,填写完整下示各步骤结果。【首都经贸大学 1998 二、7 (10分)】
建立堆结构:_____________
交换与调整:
(1)87 70 26 61 45 12 3 97;(2)____________________;
(3)61 45 26 3 12 70 87 97;(4)____________________;
(5)26 12 3 45 61 70 87 97;(6)____________________;
(7)3 12 26 45 61 70 87 97;
39.判断下列序列是否是堆(可以是小堆,也可以是大堆,若不是堆,请将它们调整为堆)。
(1)100,85,98,77,80,60,82,40,20,10,66
(2)100,98,85,82,80,77,66,60,40,20,10
(3)100,85,40,77,80,60,66,98,82,10,20
(4)10,20,40,60,66,77,80,82,85,98,100
【山东大学 1998 四 (5分)】 【山东工业大学 2000 四 (5分)】
类似本题的另外叙述有:
(1) 判别以下序列是否是堆(大顶堆),如果不是,则把它调整为堆。
(12,70,33,65,24,56,48,92,86,33)【燕山大学 2001 四、1 (8分)】
(2) 判断下面的每个结点序列是否表示一个堆,如果不是堆,请把它调整成堆。
①100,90,80,60,85,75,20,25,10,70,65,50
②100,70,50,20,90,75,60,25,10,85,65,80 【复旦大学 1997 二 (8分)】
(3) 判别下列两个序列是否为堆,若不是,按照对序列建堆的思想把它调整为堆,用图表示建堆的过程。【厦门大学 2001 二、1 (24%/3分)】
①(1,5,7,20,18,8,8,40) ②(18,9,5,8,4,17,21,6)
(4)根据给定的关键字集合(20,15,40,35,45,25,50,30,10)顺序输入
①构造一棵完全二叉树;②画出整理好的一棵堆树;③画出一棵输出一个排序记录后的二叉树;
④画出重新调整好的堆树。 【大连海事大学 2001 六 (5分)】
40.全国有10000人参加物理竞赛,只录取成绩优异的前10名,并将他们从高分到低分输出。而对落选的其他考生,不需排出名次,问此种情况下,用何种排序方法速度最快?为什么?
【北京邮电大学 1996 一、3 (4分)】
类似本题的另外叙述有:
(1)如果在1000000个记录中找出2 个最小的记录,你认为采用什么样的排序方法所需的关键字比较次数最少?共计多少次? 【厦门大学 1999 三、4】
41.已知待排序的序列为(503,87,512,61,908,170,897,275,653,462),试完成下列各题。
(1) 根据以上序列建立一个堆(画出第一步和最后堆的结果图),希望先输出最小值。
(2) 输出最小值后,如何得到次小值。(并画出相应结果图)【同济大学 2001 二 (10分)】
类似本题的另外叙述有:
(1) 对于输入关键字序列48,70,65,33,24,56,12,92进行,
① 建立堆排序的初始堆(小顶堆),要求画出主要过程。
② 建一棵平衡二叉树,画出过程(至少每次调整有一张,标出最小不平衡子树的根)。
【北京工业大学 2001 二、5 (6分)】
(2) 简要叙述堆排序的算法思想。并对如下关键字序列(3,8,85,12,37,50)按堆排序算法进行从小到大排序,要求画出排序全过程的示意图。 【南京航空航天大学 1997 五 (10分)】
(3) 设记录关键字集合K={28,17,85,96,75,8,42,65,04}
① 写出对K进行“二路归并”且按关键字递增次序排序时,各趟排序的结果;
② 如何将K建成一个完全二叉树形式的最小堆; 【北京科技大学 1997 七(10分)】
42.设有n个无序元素,按非递减次序排序,但只想得到前面长度为k的部分序列,其中n>>k,最好采用什么排序方法?为什么?如果有这样一个序列{59,11,26,34,17,91,25},得到的部分序列是:{11,17,25},对于该例使用所选择的方法实现时,共执行多少次比较?【东北大学 2002 一、4(3分)】
类似本题的另外叙述有:
(1) 如果只想得到一个序列中第K个最小元素之前的部分排序序列,那么最好应采用哪种排序算法?为什么?如由这样一个序列:57,40,38,11,13,34,48,75,25,6,19,9,7 得到其第四个最小元素之前的部分排序序列:6,7,9,11,… 用你选用算法实现时,共执行多少次比较?
【北方交通大学 1994 七(16分)】
43.写出用堆排序算法对文件F=(12,3,15,30,9,28)进行排序时,初始堆及以后每挑好一个元素重新调整后堆的状态,并指出这里的堆和败者树的一个主要区别。【东南大学 1998 二(8分)】
44.请回答下列关于堆(Heap)的一些问题:【清华大学 2000 五 (12分)】
(1)(4分) 堆的存储表示是顺序的,还是链接的?
(2)(4分) 设有一个最小堆,即堆中任意结点的关键码均大于它的左子女和右子女的关键码。其具有最大值的元素可能在什么地方?
(3)(4分)对n个元素进行初始建堆的过程中,最多做多少次数据比较(不用大O表示法)?
45.解答问题
(1)(6分)设某文件中待排序记录的排序码为72,73,71,23,94,16,05,68,试画图表示出树形选择排序(增序)过程的前三步。
(2)(4分) 试说明树形选择排序的基本思想。
(3)(2分) 树形选择排序与直接选择排序相比较,优缺点是什么?
(4)(3分) 堆排序是如何改进树形排序方法的?优点是什么?
【山东大学 1999 五(15分)】 【山东工业大学 1999 五 (15分)】
46,若有N个元素已构成一个小根堆,那么如果增加一个元素为Kn+1,请用文字简要说明你如何在log2n 的时间内将其重新调整为一个堆? 【中科院计算所 1999 三、2 (5分)】
47.填空并回答相关问题
(1)下面是将任意序列调整为最大堆(MAX HEAP)的算法,请将空白部分填上:
将任意序列调整为最大堆通过不断调用adjust函数,即:FOR(i=n/2;i >0;i- -)adjust(list,i,n);其中list为待调整序列所在数组(从下标1开始),n为序列元素个数,adjust函数为:
void adjust(int list[],int root,int n)
/*将以root为下标的对应元素作为待调整堆的根,待调整元素放在list数组中,最大元素下标为n*/
{int child,rootkey;
rootkey=list[root];
child=2*root;
while(child<=n)
{if((child<n)&&(list[child]<list[child+1]))
(1)_______;
if(rootkey>list[child])
break;
else{List[(2) ]=list[child];
child*=2;
}
}
list[child/2]=rootkey;
}
(2).判断下列序列能否构成最大堆:(12,70,33,65,24,56,48,92,86,33);若不能按上述算法将其调整为堆,调整后的结果为:( )。 【浙江大学 1998 七 (11分)】
48.回答问题:(1) 设待排序的结点个数是n。试问堆排序算法在完成一次sift建堆,并且取走找到的最小关键码后,是否还需要对于n-1个关键码从头开始建堆?为什么?
(2) 假定采用sift建堆算法。试问堆排序算法采用了怎样的节省存储空间的措施?堆排序完成后,heap中保存了关键码值的升序排列还是降序排列? 【山东工业大学 1996 三、3 (8分)】
49.在多关键字排序时,LSD和MSD两种方法的特点是什么?【北京邮电大学 2001 三、3 (5分)】
50.内排序的过程中,通常需要对待排序的关键字集合进行多遍扫描。采用不同排序方法,会产生不同的中间结果。设要将序列(Q,H,C,Y,P,A,M,S,R,D,F,X)中的关键字按字母序的升序重新排列,请分别给出对该序列进行冒泡排序,初始步长为4的希尔排序,二路归并排序及以第一个元素为分界元素的快速排序的第一趟扫描的结果,并给出对该序列作堆排序时初始建堆的结果。【长沙铁道学院 1998 四、5(6分)】
51.给出一组关键字T=(12,2,16,30,8,28,4,10,20,6,18),写出用下列算法从小到大排序时第一趟结束时的序列;
(1) 希尔排序(第一趟排序的增量为5) (2) 快速排序(选第一个记录为枢轴(分隔))
(3) 链式基数排序(基数为10) 【上海交通大学 1999 八 (9分)】
52,给出一组关键字:29,18,25,47,58,12,51,10,分别写出按下列各种排序方法进行排序时的变化过程:【南开大学 1998 八 (12分)】
(1) 归并排序 每归并一次书写一个次序。
(2) 快速排序 每划分一次书写一个次序。
(3) 堆排序 先建成一个堆,然后每从堆顶取下一个元素后,将堆调整一次。
类似本题的另外叙述有:
(1) 对关键字/权值序列{9,4,3,8,10,7,6,5}
① 设序列是初始归并段的长度,画出最佳归并树,并计算其对应归并排序的I/O次数(假设每次I/O读写一个记录)。
② 设序列是关键字输入次序,画出得到的二叉排序树。
③ 画出构造初始小根堆的过程。
④ 画出快速排序第一趟的过程。
⑤ 画出步长为2的一趟希尔排序结果。【华南师范大学2000 二 (20分)】
53,(1) 判定起泡排序的结束条件是什么?
(2) 请简单叙述希尔排序的基本思想。
(3) 将下列序列调整成堆(堆顶为最小值)
1 2 3 4 5 6 7 8 9 10
112
70
33
65
24
56
48
92
80
13
(4)在16个关键字中选出最小的关键字至少要多少次比较?再选出次小的关键字至少要多少次比较?请简要说明选择的方法和过程。 【燕山大学 1999 九(14分)】
54.给出如下关键字序列321,156,57,46,28,7,331,33,34,63试按链式基数排序方法,列出一趟分配和收集的过程。 【北京轻工业学院 1999 九 (10分)】
类似本题的另外叙述有:
(1) 已知整数数组a的10个元素为326,129,167,588,212,95,980,725,443,601,用以下排序方法进行由小到大排序。 【西南交通大学 2000 二、6】
① 用基数排序算法时,试写出第一次分配和收集后数组a中的结果。
② 用堆排序时,试写出将第一个选出的数据放在数组a的最后位置上,将a调整为堆之后的a中的结果。
55.请写出应填入下列叙述中( )内的正确答案。 【上海大学 2002 一(8分)】
排序有各种方法,如插入排序、快速排序、堆排序等。
设一数组中原有数据如下:15,13,20,18,12,60。下面是一组由不同排序方法进行一遍排序后的结果。
( )排序的结果为:12,13,15,18,20,60
( )排序的结果为:13,15,18,12,20,60
( )排序的结果为:13,15,20,18,12,60
( )排序的结果为:12,13,20,18,15,60
56.图:
no
yes
no
yes
no no
yes yes
no
yes
no
yes
注:a是整数数组,存放要排序的数组集合,n是a的长度,p,i,j,k,m,t是临时变量,p为整型数组,i,j,k,m,t为整型变量。本题给出的是将数组a的元素a1,a2,…,an从大到小排序的子程序的框图,如上图,填空完善此算法框图。该子程序采用改进的选择排序方法,该方法基于以下思想:在选择第一大元过程中:a1与aj (j=n,n-1,…,2)逐个比较,若发现aj1>a1,则aj1与a1交换,交换后新的aj1有性质aj1>= at( j1<t<n )。若再有aj2>ai(j2<j1),aj2与a1交换,则交换后的aj2也有性质aj2>=at(j2<t<=n )。如在挑选第一大元过程中,与a1交换的元素有k(k>=0)个,依次为aj1,aj2,…,ajk,则它们都满足这一性质。它们的下标满足n>=j1>j2>…>jk>1。有了这些下标,在确定第二大元时,可只考虑a2与aj(j=jk,jk-1,…,3)逐一比较。倘若jk=2,则可不经比较就知道a2就是第二大元。在选择第二大元的过程中,将与a2交换过的元素下标也记录下来,可供选择其他大元使用。但在选择第二大元时,应保证与a2交换的那些位置上的新值也都满足上述性质。依次类推,顺序选择第一,第二,…,第n-1大元,实现对a的排序。
【哈尔滨工业大学 1999 六 (14分)】
57.给定一个关键字序列{24,19,32,43,38,6,13,22},请写出快速排序第一趟的结果;堆排序时所建的初始堆;归并排序的全过程。然后回答上述三中排序方法中那一种方法使用的辅助空间最少?在最坏情况下那种方法的时间复杂度最差? 【西安电子科技大学 1999五(10分)】
58.奇偶交换排序如下所述:对于初始序列A[1],A[2],…,A[n],第一趟对所有奇数i(1<=i<n),将A[i]和A[i+1]进行比较,若A[i]>A[i+1],则将两者交换;第二趟对所有偶数i(2<=i<n),将A[i]和A[i+1]进行比较,若A[i]>A[i+1],则将两者交换;第三趟对所有奇数i(1<=i<n);第四趟对所有偶数i(2<=i<n),…,依次类推直至到整个序列有序为止。
(1) 分析这种排序方法的结束条件。
(2) 写出用这种排序方法对35,70,33,65,24,21,33进行排序时,每一趟的结果。
【山东科技大学 2001 四(10分)】
59.设某文件经内排序后得到100个初始归并段(初始顺串),若使用多路归并排序算法,并要求三趟归并完成排序,问归并路数最少为多少?【山东大学1992 一、4(3分)】【东南大学1999一、3(5分)】
60.证明:置换-选择排序法产生的初始归并段的长度至少为m。(m是所用缓冲区的长度)。
【西安电子科技大学 1996 二、5 (5分)】
61.给定8个权值集合(2,5,3,10,4,7,9,18)画出含有8个叶子结点的最佳三叉归并树,并计算出wpl=? 【东北大学 1996 一、2 (5分)】
类似本题的另外叙述有:
(1) 假设有12个初始归并段,其长度分别为85,68,62,9,18,60,20,3,6,8,44,30;现要作4路外部归并排序,试画出表示归并过程的最佳归并树,并计算树的wpl。
【厦门大学 2001 二、3(24%/3分)】
(2) 设有12个初始归并段,其长度分别为8,6,30,44,62,18,85,68,9,60,3,20;试画出表示归并过程的最佳归并树,并计算树的WPL。 【厦门大学 1998 七、2 (8分)】
(3) 现有12个初始归并段,其记录数分别为:{30,44,8,6,3,20,60,18,9,62,68,85},现用3路平衡归并,画出最佳归并树。【北京邮电大学 2002 二、1 (5分)】
(4) 设有13个初始归并段,其长度分别为28,16,37,42,5,9,13,14,20,17,30,12,18.试画出4路归并时的最佳归并树,并计算它的带权路径长度WPL。 【清华大学 1998 九 (10分)】
62.已知有31个长度不等的初始归并段,其中8段长度为2;8段长度为3;7段长度为5;5段长度为12;3段长度为20(单位均为物理块),请为此设计一个最佳5-路归并方案,并计算总的(归并所需的)读/写外存的次数。 【清华大学 1994 四 (10分)】
类似本题的另外叙述有:
(1) 已知在进行置换-选择排序时得到14个有序段,其长度分别为2,3,4,5,6,7,8,9,11,13,17,20,21,23;现进行4路平衡归并,要求给出所对应的最佳归并树和总的读/写次数。
【中科院计算所 2000 二 (10分)】
(2) 已知某文件经过置换-选择排序后,得到长度分别为47,9,31,18,4,12,23,7的8个初始归并段。试为3路平衡归并设计读写外存次数最少的归并方案,并求出读写外存的次数。
【东南大学 2000 一、6 (8分)】
(3)置换选择排序得到初始归并段长(k字节数)为37,34,300,41,70,120,35,43作图表示出这些磁盘文件进行归并所用的4阶最佳归并树,算出归并的总读写字节数,每读写1字节计为1。
【北京工业大学 1999 六 (8分)】
63.以归并算法为例,比较内排序和外排序的不同,说明外排序如何提高操作效率。
【华南师范大学 1999四(10分)】
64.对输入文件(101,51,19,61,3,71,31,17,19,100,55,20,9,30,50,6,90);当k=6时,使用置换-选择算法,写出建立的初始败者树及生成的初始归并段。【北方交通大学 1999 四(12分)】
类似本题的另外叙述有:
(1)给出一组关键字T=(12,2,16,30,8,28,4,10,20,6,18),设内存工作区可容纳4个记录,写出用置换-选择排序得到的全部初始归并段。 【上海交通大学 1999 十】
(2)用置换-选择排序法产生文件 F(长度为 n)的初始归并段(设内存缓冲区的长度为m),
① 平均情况下,初始归并段的长度为多少?为什么?
② 初始归并段的长度最长与最短时,其长度分别为多少?在何种情况下出现?简单解释一下。
【上海交通大学 2000 九(8分)】
65.设有N个记录的一个文件,经内部排序后得到650个初始归并段。
(1) 试问在四台磁带机上分别用平衡归并和多步归并进行外部排序各需要多少趟归并?
(2) 给出多步归并排序前五趟归并的情况。(10分)【北方交通大学 1997 六 (16分)】
类似本题的另外叙述有:
(1)已知有8个初始归并段,其长度分别为10,20,25,30,45,12,16,2,现用T0,T1,T2三条磁带进行二路多步归并排序,写出每遍归并后各归并段的分布,并给出初始归并段在磁带上的最佳初始分布。
【西北工业大学 1998 二、1 (10分)】
66,写出或画出下面两题的结果,【北京邮电大学 1997 四 (10分)】
(1) 归并段长度分别为9,4,7,3,8,6,15,试画出3路平衡最佳归并树。
(2) 有二叉树中序序列为:A B C E F G H D ;后序序列为:A B F H G E D C,请画出此二叉树。
类似本题的另外叙述有:
(1)设有11个长度(即包含记录的个数)不同的初始归并段,它们所包含的记录个数分别为25,40,16,38,77,64,53,88,9,48,98。试根据它们做4路平衡归并,要求:
(1)指出总的归并趟数; (3分)
(2)构造最佳归并树; (8分)
(3)根据最佳归并树计算每一趟及总的读记录数。(5分)【清华大学 1997 八 (16分)】
67,外排序中为何采用k-路(k>2)合并而不用2-路合并?这种技术用于内排序有意义吗?为什么?
【东南大学 1995 三 (8分)】
68.给定输入文件:101,48,19,65,3,74,33,17,21,20,99,53,21,并设记录缓冲区个数k=4,写出基于败者树的外排序顺串生成算法runs输出的顺串。【东南大学 1996 一、6 (6分)】
五、算法设计题:
1.冒泡排序算法是把大的元素向上移(气泡的上浮),也可以把小的元素向下移(气泡的下沉)请给出上浮和下沉过程交替的冒泡排序算法。【吉林大学 2001 二、3 (9分)】
类似本题的另外叙述有:
(1) 编写一个双向气泡排序的算法,即相邻两遍向相反方向起泡。【北京邮电大学1992六(10分)】
2.有n个记录存储在带头结点的双向链表中,现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法。(注:双向起泡排序即相邻两趟排序向相反方向起泡)【北京邮电大学 1997 七(15分)】
3.请编写直接插入排序算法。
TYPE rcdtype=RECORD
key,integer;
otheritem,anytype;
END;
listtype=ARRAY[0..n] OF rcdtype; 【北京轻工业学院 1998 七 (10分)】
4.(此题单考生做)用类PASCAL语言(或PASCAL语言)完成下列各题:
设单链表头结点指针为L,结点数据值为整型,试写出对链表L按“插入方法”排序的算法:LINSORT(L)。
【北京科技大学 1999 十、1(10分) 2000 十、1 (10分)】
5.输入50个学生的记录(每个学生的记录包括学号和成绩),组成记录数组,然后按成绩由高到低的次序输出(每行10个记录)。排序方法采用选择排序。 【北京师范大学 1999 五 】
6.有一种简单的排序算法,叫做计数排序(count sorting)。这种排序算法对一个待排序的表(用数组表示)进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键码互不相同,计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键码比该记录的关键码小,假设针对某一个记录,统计出的计数值为c,那么,这个记录在新的有序表中的合适的存放位置即为c。
(1) (3分)给出适用于计数排序的数据表定义;
(2) (7分)使用Pascal或C语言编写实现计数排序的算法;
(3) (4分)对于有n个记录的表,关键码比较次数是多少?
(4) (3分)与简单选择排序相比较,这种方法是否更好?为什么? 【清华大学 2000 三(17分)】
类似本题的另外叙述有:
结点类型和存储方式如下:
(1)TYPE node=RECORD
key:integer;
info:datatype;
count:integer
END;
VAR r:ARRAY[1..n] OF node;
请给出一个排序方法,不移动结点存储位置,只在结点的count字段记录结点在排序中的序号(设排序码最大的结点序号为1)。 【国防科技大学 1999 七 】
7.快速分类算法中,如何选取一个界值(又称为轴元素),影响着快速分类的效率,而且界值也并不一定是被分类序列中的一个元素。例如,我们可以用被分类序列中所有元素的平均值作为界值。编写算法实现以平均值为界值的快速分类方法。 【石油大学 1998 五 (18分)】
8.写出一趟快速排序算法。【山东师范大学2000 二、4(10分) 2001 二、5(10分)】
类似本题的另外叙述有:
(1)某个待排序的序列是一个可变长度的字符串序列,这些字符串一个接一个地存储于唯一的字符数组中。请改写快速排序算法,对这个字符串序列进行排序。【西安电子科技大学 2000计应用 七(11分)】
(2) 若待排序列用单链表存储,试给出其快速排序算法。 【北京邮电大学 2000 七(15分)】
9.设有一个数组中存放了一个无序的关键序列K1、K2、…、Kn。现要求将Kn放在将元素排序后的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过n。(注:用程序实现)
【南京航空航天大学 1997 六(12分)】
10.借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。设此组记录存放于数组r[l..h]中。若查找成功,则输出该记录在r数组中的位置及其值,否则显示“not find”信息。请编写出算法并简要说明算法思想。 【北京邮电大学 1998 七(15分)】
11.已知关键字序列(K1,K2,K3,…,Kn-1)是大根堆。
(1) 试写出一算法将(K1,K2,K3,…,Kn-1,Kn)调整为大根堆;
(2) 利用(1)的算法写一个建大根堆的算法。【中科院软件所 1999 七、2 (7分)】
类似本题的另外叙述有:
(1)设文件(R1,R2,…,Rn)是一个堆,Rn+1是任意一个节点,试设计一个算法,该算法把Rn+1添加到堆中,并使添加后形成的文件仍是一个堆,要求算法的时间复杂性为O(log2n)。
【吉林大学 1999 二、2 (8分) 】
12.辅助地址表的排序是不改变结点物理位置的排序。辅助地址表实际上是一组指针,用它来指出结点排序后的逻辑顺序地址。设用K[1],K[2],…,K[N]表示N个结点的值,用T[1],T[2],…,T[N]表示辅助地址表.初始时T[i]:=i,在排序中,凡需对结点交换就用它的地址来进行。例如当N=3时,对K(31,11,19)则有T(2,3,1)。试编写实现辅助地址表排序(按非递减序)算法的语句序列。
【重庆大学 2000 四、2 】
13.关于堆排序方法,完成如下工作:
(1) 简述该方法的基本思想。
(2) 写出堆排序算法。
(3) 分析该算法的时间复杂度。 【西南财经大学 1999 五】
类似本题的另外叙述有:
(1)N个元素的序列满足什么条件才能称之为堆?用类PASCAL语言写出堆排序和算法。
【南开大学 1997 七 (15分)】
14.设待排序的文件用单链表作存储结构,其形式如下:
TYPE pointer=↑node;
node=RECORD
key:integer;
next:pointer;
END;
写出以head为头指针的选择排序算法。 【中山大学 1999 二 (10分)】
15.非递归的快速排序算法。【中科院软件所 1997 三 (10分)】
16.一最小最大堆(min max heap)是一种特定的堆,其最小层和最大层交替出现,根总是处于最小层。最小最大堆中的任一结点的关键字值总是在以它为根的子树中的所有元素中最小(或最大)。如图所示为一最小最大堆;
(1) 画出在上图中插入关键字为5的结点后的最小最大堆。
(2) 画出在上图中插入关键字为80 的结点后的最小最大堆;
(3) 编写一算法实现最小最大堆的插入功能。假定最小最大堆存放在数组中,关键字为整数。
(4) 用C或PASCA;实现上述算法。 【浙江大学 1996 八 (26分 )】
17,二路插入排序是将待排关键字序列r[1..n]中关键字分二路分别按序插入到辅助向量d[1..n]前半部和后半部(注:向量d可视为循环表),其原则为,先将r[l]赋给d[1],再从r[2] 记录开始分二路插入。编写实现二路插入排序算法。 【北京工业大学 1998 八 (10分)】
18,叙述基数排序算法,并对下列整数序列图示其基数排序的全过程。(179,208,93,306,55,859,984,9,271,33) 【南京航空航天大学 2000 一 】
19.输入N个只含一位数字的整数,试用基数排序的方法,对这N个数排序。
【中国人民大学 2001 三、1(10分)】
20.设记录R[i]的关键字为R[i].KEY(1<=i<=k),树结点T[i](1<=i<=K-1)指向败者记录,T[0]为全胜记录下标。写一算法产生对应上述R[i](1<=i<= k)的败者树,要求除R[1..k]和T[0..k-1]以外,只用O(1)辅助空间。 【东南大学 1995 九 (15分)】
21.设有顺序放置的n个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红,白,蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后,重新安排时对每粒砾石的颜色只能看一次,并且只允许交换操作来调整砾石的位置。【上海大学 1999 二 2(18分)】
22,数据结构DEAP的定义如下:DEAP是一棵完全二叉树,它或者是一棵空树,或者满足下列特性:
(1)树根不包含元素.(2)其左子树是一小堆(MINHEAP),其右子树是一大堆(MAXHEAP).
(3)若右子树非空,设i是左子树的任一结点,j是右子树中与i相应的结点.若这样的j结点不存在,则取j为右子树中与i的父结点相应的结点;结点i的关键字总是小于或等于结点j的关键字值。
一个DEAP的例子如右图所示,
与结点15相对应的结点为20,与结点19对应的结点为25.
给出在该DEAP中插入结点4后的结果.
写出在DEAP中插入新结点的算法.
用C或PASCAL语言编写实现上述算法的程序.(20分)
【浙江大学 1997 7 (20分)】