实现非递归(自下而上)的合并排序算法

时间:2015-02-27 18:31:39

标签: java mergesort non-recursive

我获得了一项实现以下算法的任务:

non-recursive mergeSort algorithm

通过阅读算法本身我有点困惑,我试图遵循算法但是,因为我完全无法理解它,我的代码不起作用。任何人都可以看看我的代码(这是我无法理解要解决的问题):

public static void mergeSortNonRec(Comparable[] a) {
    Comparable[] a1 = new Comparable[a.length];
    Comparable[] b = new Comparable[a.length];

    for (int i = 1; i < a.length; i *= 2) {
        for (int j = 0; j < a.length; j += 2 * i) {
            merge(a1, j, (Integer.min(j + i, a.length) - 1), a1, j + i, (Integer.min(j + 2 * i, a.length) - 1), b, 0);
        }
    }

    for (int i = 0; i < a.length; i++) {
        a[i] = a1[i];
    }
}

这是我用我的递归mergeSort测试的辅助方法,我知道它有效:

private static void merge(Comparable[] a1, int left1, int right1, Comparable[] a2, int left2, int right2, Comparable[] a, int left) {
    int i = left1;
    int j = left2;
    int k = left;

    while (i <= right1 && j <= left2) {
        int comp = a1[i].compareTo(a2[j]);
        if (comp <= 0) {
            a[k++] = a1[i++];
        } else {
            a[k++] = a2[j++];
        }
    }
    while (i <= right1) {
        a[k++] = a1[i++];
    }
    while (j <= right2) {
        a[k++] = a2[j++];
    }
}

0 个答案:

没有答案