填空题(1999年清华大学)

快速排序的最大递归深度是__________,最小递归深度是__________。

答案解析

n;[log2n]+1

【解析】

若每趟排序后,枢轴位置均偏向于序列的一端,则为最坏情况,栈的最大深度为n。

若每趟排序都将记录序列均匀地分割或长度相近的两个子列,遇为最好情况,栈最大深度为[log2n]+1。

【扩展:改进快速排序算法】在一趟排序后比较分割所得两部分的长度,先对长度短的子序列进行快速排序,则栈的最大深度可降为O(log2n)。

讨论

快速排序的速度在所有排序方法中为最快,而且所需附加的空间也最少。

若需在O(log2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是【 】。

在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是【 】。

下述排序算法中,所需辅助存储量最多的是__________,所需辅助存储量最少的是__________,平均速度最快的是__________。A. 快速排序 B. 归并排序 C. 堆排序

在分析二叉查找树性能时常加入失败结点,即外结点,从而形成扩充的二叉树。若设失败结点i所在层次为li,那么查找失败到达失败结点时所做的数据比较次数是多少?

最佳二叉树是AVL树(平衡二叉树)。

二叉树中,具有两个子女的结点的中序后继结点最多只能有一个子女。

若散列表的负载因子α<1,则可避免碰撞的产生。

设a、b、c、d和e这5个字符的编码分别为1、2、3、4和5,并设标识符依以下次序出现ac、bd、aa、be、ab、ad、cd、bc、ae和cd。要求用哈希(Hash)方式将它们存放在具有10个位置的表中。① 对上述关键字(标识符)构造一个哈希函数,使得发生冲突尽可能地少。② 用线性探测再散列法解决冲突。写出上述各关键字在表中的位置。

设有12个数据{25,40,33,47,12,66,72,87,94,22,5,58},它们存储在散列表中,利用双散列解决冲突,要求插入新数据的平均查找次数不超过3次。① 该散列表的大小m应该设计多大?② 试为该散列表设计相应的散列函数(用除留余数法)并计算寻找下一个“空位”时向前跨步步长的再散列函数。③ 顺次将各个数据散列到表中。④ 计算查找成功的平均查找次数。

下列排序算法中,哪些时间复杂度不会超过nlogn【 】。

初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为【 】。

对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为__________。

如果待排序序列中两个数据元素具有相同的值,在排序前后它们的位置发生颠倒,则称该排序算法是不稳定的,【 】就是不稳定的排序算法。

若有n个元素已构成一个小根堆,那么如果增加一个元素Kn+1,请用文字简要说明如何在log2n的时间内将其重新调整为一个堆。

若要尽可能快地完成对实数数组的排序,且要求排序是稳定的,应该选【 】。

堆排序是不是一种稳定的排序方法?为什么?

若需在O(log2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是【 】。

搜索引擎会通过日志文件把用户每次检索使用的所有查询串都记录下来,每个查询串的长度不超过255 字节。假设目前有一千万个查询记录(重复度比较高,其实互异的查询串不超过三百万个;显然,一个查询串的重复度越高,说明查询它的用户越多,也就是越热门)。现要统计最热门的 10 个查询串,且要求使用的内存不能超过 1GB。以下各方法中,可行且效率最高的方法是【 】。

采用【 】算法对序列{18,12,10,11,23,2,7}进行一趟递增排序后,其元素的排列变为{12,10,11,18,2,7,23}。