Java 中的 MergeSort 函数显示零

问题描述 投票:0回答:1

我按照 java 中的合并排序算法教程进行操作,结果显示为 0000002468。

我输入了 1,2,3...9,0 中的数字。 它应该按升序排序。 我也仔细检查了教程,没有发现任何错误。 我自己无法解决这个问题,因为我不太明白。 顺便说一句,教程是由 BroCode 提供的。

代码:

class m{
    public static void main(String[]args){
        int array[] = {8,4,5,3,2,7,1,9,0,6};

        mergeSort(array);
    
    for(int i =0;i<array.length;i++){
        System.out.print(array[i] + "");

    }

}
private static void mergeSort(int[]array){

    int length = array.length;
    if(length<=1)return;//base case
    int middle = length/2;
    int leftArray[] = new int[middle];
    int rightArray[] = new int[length-middle];
    int i=0;//left array
    int j = 0;//right array
    for(;i<length;i++){
        if(i<middle){
            leftArray[i] = array[i];

        }else{
            rightArray[j] = array[i];
        }
    }mergeSort(leftArray);
     mergeSort(rightArray);
     merge(leftArray,rightArray,array);

    }

    private static void merge(int[]leftArray,int[]rightArray,int[]array){
        int leftSize = array.length/2;
        int rightSize = array.length-leftSize;
        int i=0,l=0,r=0;

        // check conditions for merging

        while(l<leftSize && r<rightSize){
            if(leftArray[l]<rightArray[r]){
                array[i] = leftArray[l];
                i++;
                l++;
            }else{
                array[i] = rightArray[r];
                i++;
                r++;
            }
        }
        while(l<leftSize){
            array[i] = leftArray[l];
            i++;
            l++;

        }
        while(r<rightSize){
            array[i] = rightArray[r];
            i++;
            r++;
        }
    }

}

java sorting mergesort
1个回答
0
投票

在将原始数组分解为 2 时,您忘记了增加

j
索引。

else{
     rightArray[j++] = array[i];
}
© www.soinside.com 2019 - 2024. All rights reserved.