Ⅰ、直接插入排序
Ⅱ、简单选择排序
Ⅲ、冒泡排序
Ⅳ、基数排序
交换类的排序,其趟数和原始序列状态有关,故冒泡排序与初始序列有关。
选择排序和序列初态无关,直接排除。
初始序列基本有序时,插入排序比较次数较少。本题中,插入排序仅需比较n+4次,而希尔排序和冒泡排序的比较次数均远大于此。
Ⅰ、插入排序
Ⅱ、选择排序
Ⅲ、起泡排序
Ⅳ、希尔排序
Ⅴ、堆排序
插入排序、选择排序、起泡排序的原本时间复杂度是O( n 2 n^2 n2),更换为链式存储后的时间复杂度还是o( n 2 n^2 n2)。希尔排序和堆排序都利用了顺序存储的随机访问特性,而链式存储不支持这种性质,所以时间复杂度会增加,因此选D。
Ⅰ、直接插入排序过程中元素之间的比较次数更少
Ⅱ、直接插入排序过程中所需的辅助空间更少
Ⅲ、直接插入排序过程中元素的移动次数更少
考虑较极端的情况,对于有序数组,直接插入排序的比较次数为n-1,简单选择排序的比较次数始终为1+2+…+n-1=n(n-1)/2,Ⅰ正确。
两种排序方法的辅助空间都是O(1),无差别,Ⅱ错误。
初始有序时,移动次数均为0;对于通常情况,直接插入排序每趟插入都需要依次向后挪位,而简单选择排序只需与找到的最小元素交换位置,后者的移动次数少很多,Ⅲ错误。
初始归并段的个数r=375000/600=625,因此,归并趟数S= ⌈ log m r ⌉ \lceil {\log_mr} \rceil ⌈logmr⌉= ⌈ log 5 625 ⌉ \lceil {\log_5{625}} \rceil ⌈log5625⌉=4。
第一趟把625个归并段归并成625/5=125个;
第二趟把125个归并段归并成125/5=25个;
第三趟把25个归并段归并成15/5=5个;
第四趟把5个归并段归并成5/5=1个。
不采用败者树时,在5个记录中选出最小的需要做4次比较,共有100个记录,需要做99次选择最小记录的操作,所以需要的比较次数为4 × \times × 99=396,故选C。
采用败者树时,5路归并意味着败者树的外结点有5个,败者树的高度h= ⌈ log 2 5 ⌉ \lceil {\log_2{5}} \rceil ⌈log25⌉=3。每次在参加比较的记录中选择一个关键字最小的记录,比较次数不超过h,共100个记录,需要的比较次数不超过100 × \times × 3 =300,故选B。
置换-选择排序是外部排序中生成初始归并段的方法,用此方法得到的初始归并段的长度是不等长的,其长度平均是传统等长初始归并段的2倍,从而使得初始归并段数减少到原来的近二分之一。但是,置换-选择排序不是一种完整的生成有序文件的外部排序算法。
A:2
B:m
C:2m-1
D:2m
A:2
B:m
C:2m-1
D:2m
在做m路平衡归并排序的过程中,为实现输入/内部归并/输出的并行处理,需要设置2m个输入缓冲区和2个输出缓冲区,以便在执行内部归并时,能同时进行输入/输出操作。若仅设置m个输入缓冲区,则仅能进行串行操作,无法并行处理。
将哈夫曼树的思路推广到三叉树的情形。
为了构成严格的三叉树,需添加权为0的虚叶结点,对于严格的三叉树,( n 0 n_0 n0-1)%(3-1)=u=1 ≠ \ne = 0,需要添加m-u-1=3-1-1=1个叶结点,说明7个叶结点刚好可以构成一棵严格的三叉树。按照哈夫曼树的原则,权为0的叶结点应离树根最远,构造的最小带权生成树如下图所示。

最下带权路径长度为(2+3) × \times × 3+(4+5) × \times × 2+(6+7) × \times × 1=46。
在12路归并树中只存在度为0和度为12的结点,设度为0的结点数、度为12的结点数和要补充的结点数分别为 n 0 n_0 n0、 n 1 2 n_12 n12和 n 补 n_补 n补,则有 n 0 n_0 n0=120+ n 补 n_补 n补, n 0 n_0 n0=(12-1) n 1 2 n_12 n12+1,可得 n 1 2 n_12 n12=(120-1+ n 补 n_补 n补)/(12-1)。
由于结点数 n 1 2 n_12 n12为整数,所以 n 补 n_补 n补是使上式整除的最小整数,求得 n 补 n_补 n补=2,所以答案选B。