合并排序不排序数组

时间:2017-08-14 18:57:44

标签: java sorting mergesort

在阅读合并排序后,我已经编写了下面的Java代码。运行代码时没有错误,但合并排序不对数组进行排序。它只返回原始未排序的数组。我不能为我的生活找出问题所在。我很感激任何线索。

public class mergeSort {

public void mergeSort(int array[], int n){

    if(n<2) return; 
    int m=n/2;
    int left[]=new int[m];
    int right[]=new int[n-m];
    int i;

    for(i=0; i<m;i++){
        left[i]=array[i];
    }
    for( i=m; i<n;i++){
        right[i-m]=array[i];
    }
    printArray(left);
    printArray(right);
    mergeSort(left, m);
    mergeSort(right, n-m);
    merge(array, left, m, right, m-n);
}

private void merge(int[] array, int[] left, int leftCount, int[] right, int rightCount) {
    int i=0,j=0,k=0;

    while(i<leftCount && j< rightCount){
        if(left[i]<=right[j]){
            array[k]=left[i];
            i++;
            k++;
        }else{
            array[k]=right[j];
            j++;
            k++;
        }
    }

    while(i<leftCount){
        array[k]=left[i];
        i++;
        k++;
    }
    while(j<rightCount){
        array[k]=right[j];
        j++;
        k++;
    }

}
 static void printArray(int arr[])
    {
        int n = arr.length;
        for (int i=0; i<n; ++i)
            System.out.print(arr[i] + " ");
        System.out.println();
    }

public static void main(String[] args){
    int a[]={3,2,1,7,9,8};
    printArray(a);


    mergeSort m=new mergeSort();
    m.mergeSort(a, a.length);

    printArray(a);
}

}

1 个答案:

答案 0 :(得分:0)

传递给merge方法的leftCount和rightCount是错误的。

相反,不要传递,而是在merge方法中计算。我尝试使用以下更改代码,它完全正常。

 merge(array, left, right);
 ...
private void merge(int[] array, int[] left,  int[] right) {
    int i=0,j=0,k=0;
    int leftCount= left.length;
    int rightCount = right.length;