用Java创建自下而上的MergeSort

时间:2015-02-25 04:28:43

标签: java mergesort

我正在为Java自下而上的mergeSort编写代码。现在,我认为合并调用可能存在索引问题,但我无法弄清楚我的问题到底是什么。非常感谢任何帮助!

public static int[] merge(int[]a, int lo1, int hi1, int lo2, int hi2) {
    int[]b = new int[hi2-lo1+1];
    int i = lo1;
    int j = lo2;
    int k = 0;
    while (i <= hi1 && j <= hi2) {
        if(a[i] < a[j])
            b[k++] = a[i++];
        else
            b[k++]=a[j++];
    }
    while (i <= hi1)
        b[k++] = a[i++];
    while (j <= hi2)
        b[k++] = a[j++];
    for (int l = 0; l < k; l++)
        a[lo1 + l] = b[l];
    return a; //added
}

public static int[] betterMergeSort(int[]a, int lo, int hi){
    for (int comparesize=1; comparesize < (hi-lo+1); comparesize*=2) {
        for (int k=lo; k < hi; k+=2*comparesize) {
            int[]holder = new int[Math.min(k+2*comparesize-1,hi)-lo+1];
            holder = merge(a, k, k+comparesize-1, k+comparesize, Math.min(k+2*comparesize-1, hi));
            if (holder.length == (hi-lo+1)){
                for (int j=0; j<(hi-lo+1); j++)
                    a[lo+j] = holder[j];
            }
    }
}
return a;
}

请注意,我现在需要此代码返回int []以检查其准确性。

0 个答案:

没有答案