内排序
单项选择题
1.在所有的排序方法中,关键字比较的次数与记录的初始排列次序无关的是
A.希尔排序 B.起泡排序 C.插入排序 D. 选择排序
2.设有1000个无序的元素,希望用最快的速度挑选出其中十个最大的元素,最好选用 什么排序法。
A.起泡排序 B.快速排序 C.堆排序 D.基数排序
3.在待排序的元素序列基本有序的前提下,效率最高的排序方法是
A. 插入排序 B.选择排序 C. 快速排序 D.归并排序
4.一组记录的排序码是(46,79,56,38,40,84),利用堆排序的方法建立的初始堆为
A.79,46,56,38,40,80
B.84,79,56,38,40,46
C. 84,79,56,46,40,38
D.84,56,79,40,46,38
5.一组记录的关键码是(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为
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
6.一组记录的排序码为(25,48,16,35,79,82,23,40,36,72),其中又五个长度为二的有序表,按归并排序的方法对该序列进行一次归并后的结果为
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 3579 82 23 36 40 72
D.16 25 35 48 79 23 36 40 72 82
7.排序方法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为
A.希尔排序 B.起泡排序 C.插入排序 D. 选择排序
8.排序方法中,从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端方法,称为
A.希尔排序 B.归并排序 C.插入排序 D.快速排序
9.用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,元素序列的变化情况如下:
(1)25,84,21,47,15,27,68,35,20.
(2)20,15,21,25,47,27,68,35,84
(3)15,20,21,25,35,27,47,68,84
(4)15,20,21,25,27,35,47,69,84
则所采用的排序方法是
A. 选择排序 B希尔排序 C归并排序 D 快速排序
10.下述几种排序方法中,平均查找长度最小的是
A插入排序 B选择排序 C 快速排序 D 归并排序
11.下列几种排序方法中,要求内存量最大的是
A插入排序 B选择排序 C 快速排序 D 归并排序
12.快速排序方法在 情况下不利于发挥其长处
A.要排序的数据量太大
B.要排序的数据中含有太多多个相同值
C.要排序的数据已基本有序
D.要排序的数据个数为奇数
11.2.2 填空题
1.在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录插入到有序表时,为寻找插入位置需比较( )次。
2.在利用快速排序方法对一组记录(54,38,96,23,15,72,60,45,83)进行快速排序时,递归调用而使用的栈所能达到的最大深度为( ),共需递归调用的次数为( ),其中第二次递归调用是对( )一组记录进行快速排序。
3.在堆排序中、快速排序和归并排序中,若只从存储空间考虑,则应首先选取( )方法,其次选取( )方法,最后选取( )方法;若只从排序结果的稳定性考虑,则应选取( )方法;若只从平均情况下最快考虑,则应选取( )方法;若只从最坏情况下排序最快并且要节省内存考虑,则应选取( )方法。
4在插入排序、希尔排序、选择排序、快速排序、堆排序、归并排序和基数排序中,排序是不稳定的有( )。
5.在插入排序、希尔排序、选择排序、快速排序、堆排序、归并排序和基数排序中,平均比较次数最少的排序是( ),需要内存容量最多的是( )。
6.在堆排序和快速排序中,若原始记录接近正序或反序,则选用( ),若原始记录无序,则最好选用( )。
7.在插入和选择排序中,若初始数据基本正序,则选用( );若初始数据基本反序,则选用( )。
8.对n个元素的序列进行起泡排序时,最少的比较次数是( )。
11.2 基本题答案
11.2.1 选择题答案
1.D 2.C 3.A 4.B 5.C 6.A 7.C 8.D 9.D 10.C 11.D 12.C
11.2.2 填空题答案
1.3 2.(1)2 (2) 4 (3)(23,38,15) 3.(1)堆排序 (2)快速排序 (3)归并排序
(4)归并排序 (5)快速排序 (6)堆排序
4.希尔排序,选择排序,快速排序和堆排序
5.(1)快速排序 (2)基数排序
6.(1)堆排序 (2)快速排序
7.(1)插入排序 (2)选择排序
8.n-1
- 习题解析
- 已知序列{17,18,60,40,7,32,73,65,85},请给出采用起泡排序法对该序列作升序排列时的每一趟的结果。
解:依题意,采用起泡排序的各趟结果如下:
初始:17,18,60,40,7,32,73,65,85
1趟:17,18,40,7,32,60,65,73,85
2趟:17,18,7,32,40,60,65,73,85
3趟:17,7,18,32,40,60,65,73,85
4趟:7,17,18 ,32,40,60,65,73,85
5趟:7,17,18 ,32,40,60,65,73,85
第5趟无元素交换,则排序结束。
- 已知序列{503,87,512,61,908,170,897,275,653,462},请给出采用基数排序法对该序列升序排序时每一趟的结果。
解:依题意,采用基数排序法排序的各趟的结果如下:
初始:503,87,512,61,908,170,897,275,653,462
1趟(按个位排序):170,61,462,512,503,653,275,87,897,908
2趟(按十位排序):503,908,512,653,61,462,170,275,87,897
3趟(按百位排序):61,87,170,275,462,503,512,653,897,908
- 已知序列{10,18,4,3,6,12,1,9,18,8},请给出采用shell排序法对该序列作升序排序时每一趟的结果。
解:依题意,采用shell排序法排序的各趟结果如下:
初始:10,18,4,3,6,12,1,9,18,8
1趟:10,1,4,3,6,12,18,9,15,8
2趟:4,1,6,3,10,8,15,9,18,12
3趟:1,3,4,6,8,9,10,12,15,18
第3趟无元素交换,则排序结束。
4.希尔排序、简单选择排序、快速排序和堆排序是不稳定的排序方法, 试举例说明。
【解答】
(1) 希尔排序 { 512 275 275* 061 } 增量为2
{ 275* 061 512 275 } 增量为1
{ 061 275* 275 512 }
(2) 直接选择排序 { 275 275* 512 061 } i = 1
{ 061 275* 512 275 } i = 2
{ 061 275* 512 275 } i = 3
{ 061 275* 275 512 }
(3) 快速排序 { 512 275 275* }
{ 275* 275 512 }
(4) 堆排序 { 275 275* 061 170 } 已经是最大堆,交换275与170
{ 170 275* 061 275 } 对前3个调整
{ 275* 170 061 275 } 前3个最大堆,交换275*与061
{ 061 170 275* 275 } 对前2个调整
{ 170 061 275* 275 } 前2个最大堆,交换170与061
{ 061 170 275* 275 }
5.设待排序的排序码序列为{12, 2, 16, 30, 28, 10, 16*, 20, 6, 18}, 试分别写出使用以下排序方法每趟排序后的结果。并说明做了多少次排序码比较。
(1) 直接插入排序 (2) 希尔排序(增量为5,2,1) (3) 起泡排序
(4) 快速排序 (5) 直接选择排序 (6) 锦标赛排序
(7) 堆排序 (8) 二路归并排序 (9) 基数排序
【解答】
(1) 直接插入排序
希尔(shell)本人采取的增量序列为 ?n/2?, ??n/2?/2?, ??n/2?/2?/2?, …,1。一般地,增量序列可采用?nα?, ??nα?α?, ??nα?α?α?, …, 1。大量实验表明,取α=0.45454的增量序列比取其他的增量序列的优越性更显著。计算 ?0.45454n? 的一个简单方法是用整数算术计算(5*n-1)/11。需要注意,当a< 1/2时,增量序列可能不以1结束,需要加以判断和调整。
(3) 起泡排序