排序 - 习题
若数据元素序列 11,12,13,7,8,9,23,4,5 是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是 ( )
A. 起泡排序 B. 插入排序 C. 选择排序 D. 二路归并排序
解:
- 起泡排序的特点是待排序元素相邻两两比较,逆序交换,每趟有一个最大元素到达底部(或一个最小元素达到顶部);插入排序的特点是先假定第一个元素有序,从第二个元素起,每趟将未排序元素的第一个元素插入前面的有序子文件中;选择排序的特点是第一趟在待排序元素中选最大(最小)的元素和第一个元素交换,第二趟在未排序元素中选次小(或次大)和第二个元素交换;二路归并是两两归并,再四四归并等等。即:冒泡排序和选择排序,每一趟都能确定一个元素的最终位置;归并排序,第一趟排序结束都可以得到若干个有序子序列,而此时的序列中并没有两两元素有序排列;插入排序在每趟排序后能确定前面的若干元素是有序的,而此时第二趟排序后,序列的前三个元素是有序的,符合其特征****,故选 B
采用递归方式对顺序表进行快速排序,下列关于递归次数的叙述中,正确的是 ( )
A. 递归次数与初始数据的排列次序无关
B. 每次划分后,先处理较长的分区可以减少递归次数
C. 每次划分后,先处理较短的分区可以减少递归次数
D. 递归次数与每次划分后得到的分区处理顺序无关
解:
- 快速排序和数据的初始排序次序相关。每次划分后,先处理较短分区可以减少递归深度,递归次数和先处理哪个分区无关,故选 D
为实现快速排序算法,待排序序列宜采用的存储方式是 ( )
A. 顺序存储 B. 散列存储 C. 链式存储 D. 索引存储
解:
- 待排序列只有采用数组(顺序表)存储,才可以通过地址直接访问到数据,才能实现快速排序算法,故选择 A
对同一待排序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是 ( )
A. 排序的总趟数 B. 元素的移动次数
C. 使用辅助空间的数量 D. 元素之间的比较次数
解:
- 折半插入排序和直接插入排序二者之间的不同之处在于,查找插入位置时,折半插入排序进行元素的比较次数比较少,其空间复杂度均为 O(1),故选 D
下列选项中,不可能是快速排序第 2 趟排序结果的是 ( )
A. 2, 3, 4, 5, 6, 7, 9 B. 2, 7, 5, 6, 4, 3, 9 C. 3, 2, 5, 4, 7, 6, 9 D. 4, 2, 3, 5, 7, 6, 9
解:
- 每经过一趟快排,枢轴元素都必然就位,也就是说,一趟下来至少有 1 个元素在其最终位置,所以看所有选项中有几个元素就位即可,故选 C
下列排序算法中,初始数据集合对排序性能无影响的是 ( )
A. 直接插入排序 B. 起泡排序 C. 基数排序 D. 快速排序
解:一堆 (堆排序) 海归 (归并排序) 选 (选择排序) 基 (基数排序) 友,故选 C
- 有影响:
- 冒泡排序:arr[j] < arr[j+1]则不交换。
- 插入排序:看能滑动到哪个位置,所以初始数组的排列顺序会有影响。
- 快速排序:数组有序(正序/逆序)时,选最后一个数作为num,时间复杂度会变为O(N^2);如果Num正好在中间则是O(NlogN)。
- 无影响:
- 归并排序:递归的过程。
- 选择排序:不管怎样都要遍历整个数组,每次找到1个位置的最小值。
- 堆排序:先将数组组织成大根堆,然后每次将堆顶与数组最后一个元素交换。
- 基数排序:不管怎样都要遍历整个数组对个十位排序
已知小根堆为 8, 15, 10, 21, 34, 16, 12,删除关键字 8 之后需重建堆,在此过程中关键字间比较的次数是 ( )
A. 1 B. 2 C. 3 D. 4
解:
- 删除 8 之后,则将 12 移动到堆顶,开始重建堆,12 分别与 15,10 比较,比较两次并选出最小的 10 与 12 交换,其后 12 在与其左子树 16 比较,故比较了 3 次,选 C
用直接插入排序方法对下面 4 个序列进行排序(由小到大),元素比较次数最少的是 ( )
A. 94, 32, 40, 90, 80, 46, 21, 69 B. 32, 40, 21, 46, 69, 94, 90, 80
C. 21, 32, 46, 40, 80, 69, 90, 94 D. 90, 69, 80, 46, 21, 32, 94, 40
解:对于直接插入排序,序列越有序花费时间越少,同时其元素比较次数为序列逆序(冒泡同理),故选 C
在文件“局部有序”或文件长度较小的情况下,最佳内部排序方法是 ( )
A. 直接插入排序 B. 冒泡排序 C. 简单选择排序 D. 归并排序
解:
- 在序列基本有序时,比较次数大大降低,从 $$O(n^2)$$ 降至 $$O(n)$$;简单选择排序不受初始序列影响;冒泡若本来是反序的还是要比较 n-1 次,故选 A
对下列关键字序列用快速排序法进行排序时,速度最快的情形是 ( )
A. {21, 25, 5, 17, 9, 23, 30} B. {25, 23, 30, 17, 21, 5, 9}
C. {21, 9, 17, 30, 25, 23, 5} D. {5, 9, 17, 21, 23, 25, 30}
解:
- 枢轴的选择越靠近中间,即左右两个子序列长度越接近,排序速度越快。该题有序序列下,21 正好是序列的正中,所以排除不以 21 为枢轴的 B,D。A 经过一次排序后结果为 9, 17, 5, (21), 25, 23, 30,C 经过一次排序后结果为 5, 9, 17, (21), 25, 23, 30,对于子序列 9, 17, 5 和 5, 9, 17,后者在有序状态下用快速排序方法的速度没有前者快,答案为A。
堆肯定是一棵平衡二叉树 ( )
解:
- 错。堆是一棵完全二叉树,但不是二叉平衡树,因为二叉平衡树的前提是一棵二叉排序树,其左子树关键字比右子树关键字小,而堆不满足。