2016-12-01 15 views
0

マージソートプログラムは、理論的には2つの数値的に等価な配列を返しますが、返される値は順不同であり、適切ではありません。私は、マージされたリストの最後に3つのゼロを受け取り、配列のいずれにも含めません。マージソートが適切な値を返さない適切な値

public class Merge_Sort 
{ 
    public static void main(String [] args) 
    { 
     int [] a1 = new int[10]; 
     int [] b1 = {32, 26, 44, 87, 48, 51, 53, 89, 92, 1}; 

     a1[0] = 12; 
     a1[1] = 36; 
     a1[2] = 45; 
     a1[3] = 52; 
     a1[4] = 48; 
     a1[5] = 24; 
     a1[6] = 29; 
     a1[7] = 98; 
     a1[8] = 23; 
     a1[9] = 32; 

     int i = 0, j = 0, k = 0; 
     int[] merge = new int[a1.length + b1.length]; 

     while (i < a1.length && j < b1.length) { 
      if (a1[i] < b1[j]) { 
       merge[k] = a1[i]; 
       i++; 
      } else { 
       merge[k] = b1[j]; 
       j++; 
      } 
      k++; 
     } 

     for (int x : merge) { 
      System.out.println(x); 
     } 
    } 
} 
+0

マージソートの詳細:http://www.geeksforgeeks.org/iterative-merge-sort/ – rafid059

答えて

1

これはマージソートではなく、マージステップのみです。 入力配列が既にソートされていると想定していますが、これはあなたの例では当てはまりません。

また、完全ではありません。配列の最後に達したらどうなりますか?残りの要素はどうなりますか?

+0

次に、mergesortについてお読みください。オンラインで大量の資料があります。 – George

+0

@JayLav積極的にする必要はありません:)私たちはすべてここで(無料で)手伝っています。とにかく、2つのより小さな長さの配列をとり、 'while'ループの結果をペーパーにトレースします。結果の配列がソートされていないことがわかります。あなたが書いたwhileループは、入力配列が最初にソートされている場合にのみ動作します。私はあなたが前に投稿したリンクを読むことをお勧めします:) – rafid059

+0

素晴らしい、ありがとう@RafiduzzamanSonnet。 – JayLav

関連する問題