数据结构习题-chp10–排序
一、 单项选择题
- 快速排序在最坏情况下的时间复杂度为 D 。
A.O(log2n) B.O(nlog2n) C.0(n) D.0(n2) - 排序是根据( A)的大小重新安排各元素的顺序。
A.关键字 B.数组 C.元素件 D.结点 - 评价排序算法好坏的标准主要是( D )。
A.执行时间 B.辅助空间
C.算法本身的复杂度 D.执行时间和所需的辅助空间 - 直接插入排序的方法是( B )的排序方法。
A.不稳定 B.稳定 C.外部 D.选择 - 直接插入排序的方法要求被排序的数据( B )存储。
A.必须链表 B.必须顺序 C.顺序或链表 D.可以任意 - 排序方法中,从无序序列中选择关键字最小的记录,将其与无序区(初始为空)的第一个记录交换的排序方法,称为 ( D )。
A.希尔排序 B.归并排序 C.插入排序 D. 选择排序 - 每次把待排序方的区间划分为左、右两个区间,其中左区间中元素的值不大于基准元素的值,右区间中元素的值不小于基准元素的值,此种排序方法叫做( C )。
A.冒泡排序 B.堆排序 C.快速排序 D. 归并排序 - 下述几种排序方法中,要求内存量最大的是:( D )。
A.插入排序 B.选择排序 C.快速排序 D. 归并排序 - 直接插入排序的方法是从第( B )个元素开始,插入到前边适当位置的排序方法。
A.1 B.2 C.3 D.n - 堆的形状是一棵( C )。
A.二叉排序树 B.满二叉树 C.完全二叉树 D.平衡二叉树 - 内排序是指在排序的整个过程中,全部数据都在计算机的( A )中完成的排序。
A.内存 B.外存 C.内存和外存 D.寄存器 - 快速排序的方法是( A )的排序方法。
A.不稳定 B.稳定 C.外部 D.选择 - 下列排序方法中,关键字比较次数与记录的初始排列次序无关的是( A )。
A.选择排序 B.希尔排序 C.插入排序 D.冒泡排序 - 下述几种排序方法中,平均时间复杂度最小的是( A )。
A.希尔排序 B.插入排序 C.冒泡排序 D.选择排序 - 对有n个记录的表作快速排序,在最坏情况下,算法的时间复杂度是( B )。
A.O(n) B.O(n2) C.O(nlog2n) D.O(n3) - 冒泡排序的方法对n个数据进行排序,第一趟排序共需要比较( C )次。
A.1 B.2 C.n-1 D.n - 对n个不同的排序码进行冒泡(递增)排序,在下列( B )情况比较的次数最多。
A.从小到大排列好的 B.从大到小排列好的 C. 元素无序 D.元素基本有序 - 用直接插入排序法对下面的四个序列进行由小到大的排序,元素比较次数最少的是( B )。
A,94,32,40,90,80,46,21,69 B.21,32,46,40,80,69,90,94
C.32,40,21,46,69,94,90,80 D.90,69,80,46,21,32,94,40 - 一组记录的排序码为(25,48,16,35,79,82,23,40),其中含有4个长度为2的有序表,按归并排序的方法对该序列进行一趟归并后的结果为:( A )。
A,16 25 35 48 23 40 79 82 36 72 B.16 25 35 48 79 82 23 36 40 72
C.16 25 48 35 79 82 23 36 40 72 D.16 25 35 48 79 23 36 40 72 82 - 一个数据序列的关键字为:(46,79,56,38,40,84),采用快速排序,并以第一个数为基准得到第一次划分的结果为:( C )
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,79,56,84)
二、填空题
- 设一组初始记录关键字序列为(20,18,22,16,30,19),则以20为枢轴的一趟快速排序结果为 20 18 16 19 22 30 。
- 设关键字序列为(Kl,K2,…,Kn),则用筛选法建初始堆必须从第 2 个元素开始进行筛选。
- 设一组初始记录关键字序列为(49,38,65,97,76,13,27,50),则以d=4为增量的一趟希尔排序结束后的结果为 49 13 27 50 76 38 65 97 。
- 在插入排序、选择排序和归并排序中,排序是不稳定的为: 选择排序 。
- 在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置需比较 3 次。
- 两个序列分别为:
L1={25,57,48,37,92,86,12,33}
L2={25,37,33,12,48,57,86,92}。
用冒泡排序法对L1和L2进行排序,交换次数较少的是序列: L2 。 - 对一组记录(54,35,96,21,12,72,60,44,80)进行直接选择排序时,第四次选择和交换后,未排序记录是 54 72 60 96 80 。
三、判断题
- 层次遍历初始堆可以得到一个有序的序列。( √ )
- 如果某种排序算法不稳定,则该排序方法就没有实用价值。( × )
- 希尔排序是不稳定的排序。( √ )
- 冒泡排序是不稳定的排序。( × )
- 对n个记录的进行快速排序,所需要的平均时间是O(nlog2n)。( √ )
- 堆排序所需的时间与待排序的记录个数无关。( ×)
- 当待排序的元素个数很多时,为了交换元素的位置要占用较多的时间,这是影响时间复杂度的主要因素。( √ )
- 快速排序在任何情况下都比其它排序方法速度快。( √)
- 对快速排序来说,初始序列为正序或反序都是最坏情况。( √ )
四、排序过程分析
- 已知数据序列{10,18,4,3,6,12,9,15,8},写出希尔排序每一趟(设d=4、2、1)排序的结果。
- 已知数据序列{10,18,4,3,6,12,9,15},写出二路归并排序的每一趟排序结果。
五、程序填空题
1. 设表的长度为L,试填空完成直接插入排序程序。
void insertsort(int R[ ])
{ int i,j;
for ( i=2; i<= L ; i++ )
{ R[0]=R[i];
j= i-1 ;
while (R[0] < R[j] )
{ R[j+1]= R[j] ;
j-- ;
}
R[j+1]= R[0] ;
}
}
2.二分插入排序
void BInsSort( )
{ int i, j, low, high, m;
for ( i=2; i<= n ; i++)
{ R[0]=R[i];
low=1;
high= n ;
while (low <= high)
{ m=(low+high)/2 ;
if ( R[0]<R[m] )
high=m-1 ;
else
low=m+1;
}
for (j=i-1;j>=high+1;j--)
R[j+1]= R[j] ;
R[high]=R[0];
}
}