6、数据结构与算法——归并排序(2) - liuxiaofei2010S/special-column GitHub Wiki

上一篇写了自顶而下的归并排序,现在表述一下自底向上的归并排序。即第一层是数组项为1的两组数组排序,第二层为2的数组排序,以此类推,一直到最顶层的两个数组归并。

代码如下:

public static void sort(int[] array) {
    int N = array.length;
    for (int i = 1; i < N; i *= 2) {
        for (int k = 0; k < N - i; k++) {             // mid最大只能为最后第二项
            merge(array, k, k + i - 1, Math.min(k + i * 2 - 1, N - 1));
        }
    }
}

自底向上的归并排序需要 1/2NlgN 到 NlgN 的比较次数,最多访问数组 6NlgN 次。

比较适合链表式的数据结构排序。