第九章排序练习题及答案
3. 以下稳定的排序方法是
()
A 快速排序
B 冒泡排序
C 直接选择排序 D 堆排序
4. 以下时间复杂性不是 O(n2)的排序方法是
()
A 直接插入排序
B 二路归并排序 C 冒泡排序
D 直接选择排序
5. 以下时间复杂性不是 O(nlog2n)的排序方法是
()
A 堆排序
B 直接插入排序 C 二路归并排序 D 快速排序
if(i<j) {_ r[i]=r[j]_______;i++;/* 将 r[j].kiy<x.key 的记示移至 i 所指位置*/ while((r[i].key<=x.key)&&(i<j)) j++________;/*自首行端进行比较*/ if(i<j){ r[j]=r[i]________;j--;}/* 将 r[j].kiy<x.key 的记示移至 j 所指
void merge(list a,list R,int h,int m,int n) {i=h;k=h;j=m+1; while((i<=m)&&(j<=n)) {if(a[i].key<=a[j].key){R[k]=_ a[ii]__ _;_ ii++___;} else{R[k]= a[j] _;_ j++___;} k++; } while(i<= m________){R[k]=a[i];i++;k++;} while(j<=n________){R[k]=a[j];j++;k++;} }
置上。
A 归并排序
B 插入排序
C 快速排序
D 选择排序
17.将上万个一组无序并且互不相等的正整数序列,存放于顺序存储结构中,采用( )
方法能够最快地找出其中最大的正整数。
A 快速排序
B 插入排序
C 选择排序
D 归并排序
18 一般情况下,以下四种排序方法中,平均查找长度最小的是
()
A 归并排序
B 快速排序
C 快速排序方法
void straightsort(list r);
{for(i=_2;i<=n;i++) {r[0]=r[i];j=i-1;
while(r[0].key<r[j].key){r[j+1]=_ 、r[j]_;j--;} r[j+1]= r[0]; } } 7.直接插入排序是稳定的,它的时间复杂性为 O(n2)__,空间复杂度为___O _______。 8.以下为冒泡排序的算法。请分析算法,并在________上填充适当的语句。 void bulbblesort(int n,list r) /*flag 为特征位,定义为布尔型*/ {for(i=1;i<= n-1;i++) {_ flag=1;
C 合并
D 查找
9.当初始序列已按健值有序时,用直接插入算法进行排序,需要比较的次数为( )
A n-1
B log2n
C 2log2n
D n2
10.快速排序在最坏的情况下的时间复杂度是
()
A O(log2n)
B O(nlog2n)
C O(n2)
D O(n3)
11.具有 24 个记录的序列,采用冒泡排序至少的比较次数是
()
A1
B 23
C 24
D 529
12.用某种排序方法对序列(25,84,21,47,15,27,68,35,20)进行排序,记录序列
的变化情况如下:
25 84 21 47 15 27 68 35 20
15 20 21 25 47 27 68 35 84
15 20 21 25 35 27 47 68 84
25. 大 多 数 排 序 算 法 都 有 两 个 基 本 的 操 作 :
动
。
比较
和移
26. 在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第 7
个记录 60 插入到有序表时,为寻找插入位置至少需比较 6
次。
27. 在插入和选择排序中,若初始数据基本正序,则选用 插入
6. 在文件局部有序或文件长度较小的情况下,最佳的排序方法是
()
A 直接插入排序
B 冒泡排序
C 直接选择排序 D 归并排序
7. 对于大文件的排序要研究在外设上的排序技术,即
()
A 快速排序法
B 内排序法
C 外排序法
D 交叉排序法
8.排序的目的是为了以后对已排序的数据元数进行( )操作。
A 打印输出
B 分类
void select(list r,int n) {for(i=1;i<=.n-1;i++)/*每次循环,选择出一个最小键值*/ {k=i; for(j=i+1;j<=n;j++)if(r[j].key<r[k].key) k=j _; if(k!=I)swap(r[k],r[i]);/*函数 swap(r[k],r[i])交换 r[k]和 r[i]的位置*/ } }
要的附加空间是 O(n)
。
。若 ,所需
31. 对于 n 个记录的表进行 2 路归并排序,整个归并排序需进行 ┌log2n┐ 趟(遍)。
32. 设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列,则: 冒泡排序一趟扫描的结果是 H C Q P A M S R D F X Y ; 初始步长为 4 的希尔(shell)排序一趟的结果是 P A C S Q H F X R D M Y ; 二路归并排序一趟扫描的结果是 H Q C Y A P M S D R F X; 快速排序一趟扫描的结果是 F H C D P A M Q R S Y X ; 堆排序初始建堆的结果是 A D C R F Q M S Y P H X 。
位置*/
} } r[i]= x;return(i);/*一趟快速 排序结束,将 x 移至正确的位置*/ }
11.对快速排序来讲,其最好情况下的时间复杂度是__ O(nlog2n ) _,其最坏情况下的时间 复杂度是 O(n2) 。 12.以下是直接选择排序的算法。请分析算法,并在横线上填充适当的语句。
反序,则选用 选择
。
;若初始数据基本
28. 在堆排序和快速排序中,若初始记录接近正序或反序,则选用 堆排序
初始记录基本无序,则最好选用 快速排序
。
;若
29. 对于 n 个记录的集合进行冒泡排序,在最坏的情况下所需要的时间是 O(n2)
对其进行快速排序,在最坏的情况下所需要的时间是 O(n2)
。
30. 对于 n 个记录的集合进行归并排序,所需要的平均时间是 O(nlog2n)
此算法的执行时间为_、O(n-h+1)_.
20.归并排序要求待排序列由若干个__有序 _的子序列组成。 21.二路归并排序的时间复杂度是 O(log2n)。 22.对于 n 个记录的集合进行归并排序,所需的附加空间消耗是.O(n2)_。 23.设表中元素的初始状态是按键值递增的,分别用堆排序、快速排序、冒泡排序和归并排序 方法对其仍按递增顺序进行排序,则冒泡排序___________最省时间,、快速排序 _最费时间。 24.分别采用堆排序、快速排序、插入排序和归并排序算法对初始状态为递增序列的表按递 增顺序进行排序,最省时间的是插入排序_算法,最费时间的是、快速排序_算法。
第九章 排序练习题及答案
一、名词解释
1.排序
2.内部排序 3.外部排序
4.堆
5.堆排序
二、填空
1.若待排序的序列中存在多个记录具有相同的键值,经过排序,这些记录的相对次序仍然保 持不变,则称这种排序方法是稳定_______的,否则称为_不稳定________的。 2.按照排序过程涉及的存储设备的不同,排序可分为.内部、排序和_外部排序。 3.按排序过程中依据的不同原则对内部排序方法进行分类,主要有:插入排序、交换排序、 选择排序、归并排序等四类。 4.在排序算法中,分析算法的时间复杂性时,通常以键值比较和_记录移动为标准操作。评价 排序的另一个主要标准是执行算法所需要的附加空间。 5.常用的插入排序方法有直接 _插入排序、折半插入排序、表插入排序和希尔插入排序。 6.以下为直接插入排序的算法。请分析算法,并在________上填充适当的语句。
33. 在堆排序、快速排序和归并排序中,
若只从存储空间考虑,则应首先选取 方法,其次选取 快速排序方法,最后选取归并排序
方法;
若只从排序结果的稳定性考虑,则应 选取
归并排序
方法;
若只从平均情况下最快考虑,则应选取 堆排序、快速排序和归并排序 方法;
若只从最坏情况下最快并且要节省内存考虑,则应选取 堆排序 方法。
13.直接选择排序是不稳定的,其时间复杂性为_O(n2) _______。 14.树形选择排序要增加 n-1_个结点以保存前面比较的结果。另外,排序的结果还需要另外开 辟_存储区. 15.树形选择排序可用一棵树来表示这一排序过程,树中的 n 个叶子代表待排序记录的键值, 叶子上面一层是叶子两两比较的结果,依次类推。__树根______表示最后选择出来的最小关 键字。在选择次最小键值时,只需将叶结点中最小键值改成_+∝ ,重新进行比较。依次类 推 16.若树形选择排序的叶子数为 n,除第一次需执行_ n-1__次比较就选择出一个最小的键值 外,以后的每次都只经过 log2n 次比较就选择出一个最小的键值。所以树形选择排序总的时 间开销为_ O(nlog2n)_。 17.从一个无序序列建立一个堆的方法是:首先将要排序的所有键值分放到一棵完全二叉树_ 的各个结点中,然后从 i= n/2 _的结点 ki 开始,逐步把以 kn/2,kn/2-1,kn/2-2,……为根的子树排 成堆,直到以 k1 为根的树排成堆,就完成了建堆的过程。 18.堆排序是不稳定,空间复杂度为 O(1)_。在最坏情况下,其时间复杂性也为 O(nlog2n)。 19.以下将 ah,…,am 和 am+1,…,an 两个有序序列(它们相应的关键字值满足 Kh<=…<=Km,Km+1<=… <=Kn)合并成一个有序序列 Rh,…,Rn(使其关键字值满足 Kh<=…<=Kn)。请分析算法,并在 ________上填充适当的语句。