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}
分析:pivotkey的选择越靠近中央,即左右两个子序列长度越接近,排序速度越快。
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。
pivotkey的选择越靠近中央,即左右两个子序列长度越接近,排序速度越快。一般第一个数作为基准。
2. 个数约为50k的数列需要从小到大排序,数列特征是基本逆序(多数数字从大到小,个别乱序),以下哪种排序算法在事先不了解数列特征的情况下性能大概率最优(不考虑空间限制):堆排序。
分析:个数约为50K,基本可以秒杀一般的`冒泡`,`改进冒泡`,`选择`,`插入`等基本的排序。加上数列的特征是基本逆序,而快速排序的worst case就是基本逆序或者基本有序的情况。综上所述,堆排序应该是大概率最优的。
堆排序与初始数列次序无关。
3. 将一组无序的正整数重新排列成有序序列,其方法有:BCD
A拓扑排序 B快排 C堆排序 D基数排序
分析:在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological sorting)。
每个顶点出现且只出现一次;
若A在序列中排在B的前面,则在图中不存在从B到A的路径。
也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。
拓扑排序是图中判断是否有环的算法,在图中查找一个无环的所有的节点,不是用来数据排序的。
4. 下列排序法中,每经过一次元素的交换会产生新的逆序的是(A)
A 快排 B 冒泡 C 简单插入排序 D 简单选择排序
分析:在数据元素的序列中,对于某个元素,如果其后存在一个元素小于它,则称之为存在一个逆序。冒泡排序只交换相邻元素,但不是每次移动都产生新的逆序。简单插入排序每一次比较后最多移掉一个逆序。快速排序每一次交换移动都会产生新的逆序,因为当不会有新的逆序产生时,本轮比较结束。简单选择排序的基本思想是先从所有 n 个待排序的数据元素中选择最小的元素,将该元素与第一个元素交换,再从剩下的 n-1 个元素中选出最小的元素与第 2 个元素交换,这样做不会产生逆序。故本题答案为 A 选项。
5. 排序时,若不采用计数排序等科技换时间的方法,合并m个长度为n的已排序数组的时间复杂度最优为:O(mn(logm))
分析:合并m个长度为n的已排序数组的时间复杂度为O(nmlogm)。思路是:首先将m个已排序数组的第一个数,建立大小为m的小根堆,时间复杂度O(m)。然后每次输出堆顶的数,再将其所属已排序数组的后一个数放入堆顶,调节小根堆。因为我们有m*n个数,小根堆调整时间为O(logm),所以时间复杂度O(nmlogm)。