1

我被分配执行以下算法:

非递归归并排序算法  

阅读算法本身让我有点困惑,我尝试遵循算法,但是由于我无法完全理解它,我的代码不起作用。任何人都可以看看我的代码(这是我不明白要解决什么问题的一点):

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++];
    }
}
4

0 回答 0