23490数据结构习题答案 下载本文

第8章 排序

1.选择题

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

A.归并排序 B.冒泡排序 C.插入排序 D.选择排序 (2)从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为( )。

A.归并排序 B.冒泡排序 C.插入排序 D.选择排序 (3)对n个不同的关键字由小到大进行冒泡排序,在下列( )情况下比较的次数最多。

A.从小到大排列好的 B.从大到小排列好的 C.元素无序 D.元素基本有序 (4)对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数最多为( )。 A.n+1 B.n C.n-1 D.n(n-1)/2 (5)快速排序在下列( )情况下最易发挥其长处。 A.被排序的数据中含有多个相同排序码 B.被排序的数据已基本有序 C.被排序的数据完全无序

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

(6)对n个关键字作快速排序,在最坏情况下,算法的时间复杂度是( )。 A.O(n) B.O(n2) C.O(nlog2n) D.O(n3) (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 (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

(9)堆是一种( )排序。

A.插入 B.选择 C.交换 D.归并 (10)堆的形状是一棵( )。

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

(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 (12)下述几种排序方法中,要求内存最大的是( )。

A.希尔排序 B.快速排序 C.归并排序 D.堆排序 (13)下述几种排序方法中,( )是稳定的排序方法。

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

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

A.冒泡排序 B.快速排序 C.简单选择排序 D.堆排序 (15)下列排序算法中,( )不能保证每趟排序至少能将一个元素放到其最终的位置上。

A.希尔排序 B.快速排序 C.冒泡排序 D.堆排序 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

⑦ 堆排序

第一步,形成初始大根堆(详细过程略),第二步做堆排序。

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

初始排序 不是大根堆 形成初始大根堆

12 28 16 20 18 10 16* 2 6 30 交换1与10对象 6 20 16 12 18 10 16* 2 28 30 交换1与9对象 2 18 16 12 6 10 16* 20 28 30 交换1与8对象 16* 12 16 2 6 10 18 20 28 30 交换1与7对象 28 20 16 12 18 10 16* 2 6 30 从1到9重新形成堆

20 18 16 12 6 10 16* 2 28 30 从1到8重新形成堆

18 12 16 2 12 10 16* 20 28 30 从1到7重新形成堆

16* 12 16 2 6 10 18 20 28 30 从1到6重新形成堆

10 12 16 2 6 16* 18 20 28 30 交换1与6对象 6 12 10 2 16 16* 18 20 28 30 交换1与5对象 12 6 10 12 16 16* 18 20 28 30 交换1与4对象 2 6 10 12 16 16* 18 20 28 30 交换1与3对象 16 12 10 2 6 16* 18 20 28 30 从1到5重新形成堆

12 6 10 2 16 16* 18 20 28 30 从1到4重新形成堆

10 6 2 12 16 16* 18 20 28 30 从1到3重新形成堆

6 2 10 12 16 16* 18 20 28 30 从1到2重新形成堆