2016-08-06 17 views
1

マージソートアルゴリズムを作成しようとしましたが、どこが間違っているのか分かりません。私が間違ったことを私に見せてもらえますか?アルゴリズムを使っていくつかの有用なリソースや練習を提案しますか?マージソートの実装で間違いを見つけるにはどうすればよいですか?

マージで
public class MergeSort { 

private int[] auxArray; 

public void sort(int[] array) 
{ 
    auxArray = new int[array.length]; 
    sort(array, 0, array.length - 1); 

     for (int i = 0; i < array.length; i++) { 
      System.out.println(array[i]); 
     } 

} 

private void sort(int[] array, int begin, int end) 
{ 
    if(begin >= end) return ; 

    int middle = begin + (end - begin)/2; 

    sort(array, begin, middle); 
    sort(array, middle + 1, end); 
    merge(array, begin, middle, end); 

} 


private void merge(int[] array, int begin, int middle, int end) 
{ 

    int i = begin; 
    int j = middle + 1; 

    for (int k = begin; k <= end; k++) { 
     auxArray[k] = array[k]; 
    } 

    for (int k = begin; k <= end; k++) 
    { 
     if(i > middle) array[k] = auxArray[j++]; 
     else if(j > end) array[k] = auxArray[i++]; 
     else if(array[i] >= array[j]) 
     { 
      array[k] = auxArray[j++]; 
     } 
     else 
      array[k] = auxArray[i++]; 
    } 

} 

public static void main(String[] args) throws Exception { 

    MergeSort sort = new MergeSort(); 

    int[] array = new int[] {10, 9, 8, 7, 6, 5 ,4, 3, 2 ,1}; 

    sort.sort(array); 

} 
} 
+1

 else if(array[i] >= array[j]) 

を変更するには、それが現在何をするかを説明するために、データセットの後/前にお示ししませんか?あなたは何が働いていないと言いますか? – halfer

+1

'end'が' begin + 1'に等しいときに何が起こるかを調べることをお勧めします。つまり、配列に正確に1つの項目がある場合はどうなりますか。 – user3386109

+0

最初に 'array'を' auxArray'に指定した後、 'private'メソッドのいずれかで' array'パラメータを渡す必要はありません。そこで 'auxArray'を使用してください。 – maraca

答えて

2

()、

 else if(auxArray[i] >= auxArray[j]) 
関連する問題