2017-02-25 15 views
-1
public static int[] mergeArray(int[] a, int[] b) { 
    int[] result = new int[a.length + b.length]; 

    int i = 0; // to index array a 
    int j = 0; // to index array b 

    for (int k = 0; k < result.length; k++) { 
     if(a.length == i+1) { 
      result[k] = b[j-1]; 
      j++; 
     }else if(b.length == j+1) { 
      result[k] = a[i-1]; 
      i++; 
     }else if(a[i] > b[j]) { 
      result[k] = b[j]; 
      j++; 
     }else if(a[i] < b[j]) { 
      result[k] = a[i]; 
      i++; 
     } 
    } 
    return result; 
} 

// this method does the same thing as sortArray but much more efficiently 
// it uses meregeArray 
public static int[] mergeSortArray(int[] poop) { 
    int[] p1 = new int[poop.length/2]; 
    int[] p2 = new int[poop.length-p1.length]; 
    for (int i = 0; i<p1.length; i++) { 
     p1[i] = poop[i]; 
    } 
    for (int i = 0; i<p2.length; i++) { 
     p2[i] = poop[i+p1.length - 1]; 
    } 
    sortArray(p1); 
    sortArray(p2); 
    return mergeArray(p1, p2); 
} 

public static void main(String[] args) { 
    int[] poop = new int[] {1, 3, 5, 7, 9, 2, 4, 6, 8, 10}; 
    String s = ""; 
    for(int i : mergeSortArray(poop)){ 
     s += i + ", "; 
    } 
    System.out.println(s); 
} 

コードはint []をとり、2つに変換してソートしますが、以下のようにエラーが出力されているように見えます。私はわからないんだけど、任意の助けをいただければ幸いです:)ここ java mergeSort奇妙な出力

が出力されます。 1、2、3、4、5、6、7、6、8、9、

みんなありがとう誰が助けてくれるのですか?

+1

プログラムをデバッグしようとしましたか? 'mergeSortArray'(Hint-NO)の最初の実行の後、p1、p2で期待される結果を得ますか? 'sortArray(p1)'とは何ですか? – TDG

答えて

1

まず、あなたは宇宙の他の誰よりもスマートではありません。内部的にはJavaはあなたが私が間違っから10を取り外す分割されているので、このバグの配列のライン

p2[i] = poop[i+p1.length - 1]; // bad 
    p2[i] = poop[i+p1.length];  // good 

にバグがあることを信じて、第二にsource code of java.util.Arrays

で例えば見ることができるようにマージソートやその他の効率的なアルゴリズムを使用していますmergeArrayにバグがある出力

そして第三には、それがあるべき

if(a.length == i) { 
     result[k] = b[j]; 
     j++; 
    } else if(b.length == j) { 
     result[k] = a[i]; 
     i++; 

これは「6」の複製の結果です

TDGによれば、コードをデバッグすることは、学ぶべき重要なスキルです。