题目:
设有5个初始归并段,每个归并段有20个记录,采用5路平衡归并排序,若不采用败者树,使用传统的顺序选小(参看选择排序算法)的方法,总的比较次数是()次
原题解析:
我觉得这个总比较次数不一定是 4×99 呀
他这个的意思是,对于我这 99 个位置,每一次比较我都有 5 归并段中的记录可以用来选择,所以每一个位置都有 4 次比较
但是对于第 99 个位置,你五个归并段还都有记录?那不起码都 98+5 = 103 个记录了,离谱
正确的计算方法我觉得应该是,先考虑五个归并段都只剩下一个记录的情况,这个时候已经排好了 19×5 = 95 个记录,还有 5 个记录待排,倒数第五个记录可以比较 4 次,倒数第四个可以比较三次……因此最坏情况是 19×5×4+4+3+2+1 = 390 次
但是万一我的归并段有序到不行,我一开始确实每个位置比 4 次,但是我一直都用的同一个归并段中的记录,然后一直用完他,然后我对于之后的每一个归并段都是同样的情况,都是一直取同一个直到用完
直到只剩最后一个归并段的时候,由于归并段在建段的时候已经排好序了,所以剩下的那个段直接加在归并结果的末尾
所以最好情况是一直取同一个直到用完,20×4+20×3+20×2+20×1 = 200 次
所以还是这个疑惑,这题目出题人自己做过吗……