对于n个记录的表进行2路归并排序,整个归并排序需进行 log2 n 趟(遍),共计移动 n*log2 n 次记录。对于这句话的具体解释。

声明:本文可能存在不足,如有错误,敬请指正,礼貌交流,感激不尽。

约定:log2 n代表以2为底,n的对数

1,为什么需要进行log2 n趟?

可以这样理解:二路归并就是把两路数据合二为一,逆过来看就是将n个数据不断除以2取整,直到n变为1,所以需要log2 n趟。

如果从归并树的角度来理解的话会麻烦一点。(仔细看上面的归并树,需要进行的趟数(层数-1)就是归并树的高度减一,注意要减一才符合接下来的逻辑。假设记录共有n个,共k层,那么2^(k-1)  >= n。所以k-1>=log2 n,粗略估计就是log2 n。)

2,为什么需要移动nlog2n次记录?

 仔细看以上的图,归并排序一趟就是比较i和j所指元素的大小,选择较小者存入k所指位置。每往k中存入一个数据,我们就称发生了一次记录移动。所以每一趟都会发生n次记录的移动。总共log2 n趟,所以总共会发生n*log2 n次记录的移动。

写在最后:相关图片来源于某计算机考研机构

猜你喜欢

转载自blog.csdn.net/fly_view/article/details/127754088