在Java中创建自底向上的合并排序

在Java中创建自底向上的合并排序,java,mergesort,Java,Mergesort,我正在用Java编写自下而上的合并排序的代码。现在,我认为在调用merge时可能存在索引问题,但我很难准确地找出我的问题所在。任何帮助都将不胜感激 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

我正在用Java编写自下而上的合并排序的代码。现在,我认为在调用merge时可能存在索引问题,但我很难准确地找出我的问题所在。任何帮助都将不胜感激

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[]合并(int[]a,int-lo1,int-hi1,int-lo2,int-hi2){
int[]b=新int[hi2-lo1+1];
inti=lo1;
int j=lo2;
int k=0;

while(我期望/实际输出?包括一个完全可运行的代码示例将帮助其他人测试它。您当前得到了什么行为以及您期望得到什么?包括完整堆栈跟踪或输入/输出示例。在
betterMergeSort
中似乎有一个大括号。此代码使用int[]创建内存泄漏我现在可以编译这个程序,但是它运行的是ArrayIndexOutOfBoundsException。我在调试这个程序时遇到了困难,但我感觉它与底部代码有关,因为顶部(合并)与我的原始mergesort代码一起工作。