第8章排序分析 联系客服

发布时间 : 星期五 文章第8章排序分析更新完毕开始阅读fb9ba95933126edb6f1aff00bed5b9f3f90f72ae

第8章 排序

1.选择题

(1)从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,这种排序方法称为( )。

A.归并排序 B.冒泡排序 C.插入排序 D.选择排序 答案:C

(2)从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为( )。

A.归并排序 B.冒泡排序 C.插入排序 D.选择排序 答案:D

(3)对n个不同的关键字由小到大进行冒泡排序,在下列( )情况下比较的次数最多。 A.从小到大排列好的 B.从大到小排列好的 C.元素无序 D.元素基本有序 答案:B

解释:对关键字进行冒泡排序,关键字逆序时比较次数最多。

(4)对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数最多为( )。 A.n+1 B.n C.n-1 D.n(n-1)/2 答案:D

解释:比较次数最多时,第一次比较n-1次,第二次比较n-2次……最后一次比较1

次,即(n-1)+(n-2)+…+1= n(n-1)/2。

(5)快速排序在下列( )情况下最易发挥其长处。 A.被排序的数据中含有多个相同排序码 B.被排序的数据已基本有序 C.被排序的数据完全无序

D.被排序的数据中的最大值和最小值相差悬殊 答案:C

解释:B选项是快速排序的最坏情况。

(6)对n个关键字作快速排序,在最坏情况下,算法的时间复杂度是( )。 A.O(n) B.O(n2) C.O(nlog2n) D.O(n3) 答案:B

解释:快速排序的平均时间复杂度为O(nlog2n),但在最坏情况下,即关键字基本排好

序的情况下,时间复杂度为O(n2)。

(7)若一组记录的排序码为(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

答案:C

(8)下列关键字序列中,( )是堆。

A.16,72,31,23,94,53 B.94,23,31,72,16,53 C.16,53,23,94,31,72 D.16,23,53,31,94,72 答案:D

解释:D选项为小根堆 (9)堆是一种( )排序。

A.插入 B.选择 C.交换 D.归并 答案:B

(10)堆的形状是一棵( )。

A.二叉排序树 B.满二叉树 C.完全二叉树 D.平衡二叉树 答案:C

(11)若一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为( )。

A.79,46,56,38,40,84 B.84,79,56,38,40,46 C.84,79,56,46,40,38 D.84,56,79,40,46,38 答案:B

(12)下述几种排序方法中,要求内存最大的是( )。

A.希尔排序 B.快速排序 C.归并排序 D.堆排序 答案:C

解释:堆排序、希尔排序的空间复杂度为O(1),快速排序的空间复杂度为O(log2n),

归并排序的空间复杂度为O(n)。

(13)下述几种排序方法中,( )是稳定的排序方法。

A.希尔排序 B.快速排序 C.归并排序 D.堆排序 答案:C

解释:不稳定排序有希尔排序、简单选择排序、快速排序、堆排序;稳定排序有直接

插入排序、折半插入排序、冒泡排序、归并排序、基数排序。

(14)数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用( )算法最节省时间。

A.冒泡排序 B.快速排序 C.简单选择排序 D.堆排序 答案:D

(15)下列排序算法中,( )不能保证每趟排序至少能将一个元素放到其最终的位置上。

A.希尔排序 B.快速排序 C.冒泡排序 D.堆排序 答案:A

解释:快速排序的每趟排序能将作为枢轴的元素放到最终位置;冒泡排序的每趟排序

能将最大或最小的元素放到最终位置;堆排序的每趟排序能将最大或最小的元素放到最终位置。

2.应用题

(1)设待排序的关键字序列为{12,2,16,30,28,10,16*,20,6,18},试分别写出使用以下排序方法,每趟排序结束后关键字序列的状态。

① 直接插入排序 ② 折半插入排序

③ 希尔排序(增量选取5,3,1) ④ 冒泡排序 ⑤ 快速排序 ⑥ 简单选择排序 ⑦ 堆排序 ⑧ 二路归并排序 答案:

①直接插入排序

[2 12] 16 30 28 10 16* 20 6 18 [2 12 16] 30 28 10 16* 20 6 18 [2 12 16 30] 28 10 16* 20 6 18 [2 12 16 28 30] 10 16* 20 6 18 [2 10 12 16 28 30] 16* 20 6 18 [2 10 12 16 16* 28 30] 20 6 18 [2 10 12 16 16* 20 28 30] 6 18 [2 6 10 12 16 16* 20 28 30] 18 [2 6 10 12 16 16* 18 20 28 30]

② 折半插入排序 排序过程同①

③ 希尔排序(增量选取5,3,1)

10 2 16 6 18 12 16* 20 30 28 (增量选取5) 6 2 12 10 18 16 16* 20 30 28 (增量选取3) 2 6 10 12 16 16* 18 20 28 30 (增量选取1)

④ 冒泡排序

2 12 16 28 10 16* 20 6 18 [30] 2 12 16 10 16* 20 6 18 [28 30] 2 12 10 16 16* 6 18 [20 28 30] 2 10 12 16 6 16* [18 20 28 30] 2 10 12 6 16 [16* 18 20 28 30] 2 10 6 12 [16 16* 18 20 28 30] 2 6 10 [12 16 16* 18 20 28 30] 2 6 10 12 16 16* 18 20 28 30]

⑤ 快速排序

12 [6 2 10] 12 [28 30 16* 20 16 18] 6 [2] 6 [10] 12 [28 30 16* 20 16 18 ] 28 2 6 10 12 [18 16 16* 20 ] 28 [30 ] 18 2 6 10 12 [16* 16] 18 [20] 28 30 16* 2 6 10 12 16* [16] 18 20 28 30 左子序列递归深度为1,右子序列递归深度为3

⑥ 简单选择排序

2 [12 16 30 28 10 16* 20 6 18] 2 6 [16 30 28 10 16* 20 12 18] 2 6 10 [30 28 16 16* 20 12 18] 2 6 10 12 [28 16 16* 20 30 18] 2 6 10 12 16 [28 16* 20 30 18] 2 6 10 12 16 16* [28 20 30 18] 2 6 10 12 16 16* 18 [20 30 28] 2 6 10 12 16 16* 18 20 [28 30] 2 6 10 12 16 16* 18 20 28 [30]

⑧ 二路归并排序

2 12 16 30 10 28 16 * 20 6 18 2 12 16 30 10 16* 20 28 6 18 2 10 12 16 16* 20 28 30 6 18 2 6 10 12 16 16* 18 20 28 30

(2)给出如下关键字序列{321,156,57,46,28,7,331,33,34,63},试按链式基数排序方法,列出每一趟分配和收集的过程。

答案:

按最低位优先法 →321→156→57→46→28→7→331→33→34→63 分配 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] 321 33 34 156 57 28

331 63 46 7

收集 →321→331→33→63→34→156→46→57→7→28

(3)对输入文件(101,51,19,61,3,71,31,17,19,100,55,20,9,30,50,6,90);当k=6时,使用置换-选择算法,写出建立的初始败者树及生成的初始归并段。

答案:

初始败者树