2017-08-14 3 views
0

私はマージソートで読んだ後、以下の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); 
} 

}

答えて

0

マージメソッドに渡すleftCountとrightCountが間違っています。

代わりにそれを渡すのではなく、マージメソッドで計算してください。私は以下の変更であなたのコードを試して、それは完全に正常に動作します。

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; 
+0

@Jeyaprakashさん、ありがとうございます。私はこのビットを見過ごした – ali

関連する問題