前言 上一篇文章写了一个自顶向下的归并排序,把一个完整的数组不断二分,然后再合并。其实换一种思路:把数组中相邻的N个元素看成是已经二分好了的,直接进行合并,就省掉了二分那一步骤 C++实现: template<typename> void mergeSortButton2Top(T arr[], int n) { for (int size = 1; size &lt;= n; size += size) { for (int i = 0; i+size &lt; n; i+=2*size) //对[i,i+size-1]和[i+size,i+2*size-1]进行归并 __merge(ar