2016-12-10 10 views
-1

挿入のソートの出力が正しくありません。 insertionSortメソッドを呼び出そうとしたとき、返された配列がソートされていません挿入ソートの出力が期待通りではありません

breakステートメントの正しい使用ですか?

public int[] insertionSort(int [] arr){ 
    for(int i=1;i<arr.length;i++){ 
     for(int j=0;j<=i-1;){ 
      int temp; 
      if(arr[i] < arr[j]){ 
       temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; 
       break; 
      } 
      else j++; 
      } 
     } 
     return arr; 
} 
int [] array = {10,5,6,7,1,9,3,8}と方法と呼ば

が、結果が正しくない:ソート後

出力:1、3、7、8、5、10、6、9、//出力がソートされずここではやや

+0

適切なJava実装の挿入ソートを検索し、問題を見つけるためにあなたと比較してみてください – rafid059

+2

なぜifステートメント内で壊れていますか? –

+0

内部で何が起こったのか説明できますか? –

答えて

1

によって変化し、それが動作するコードです:

番目の
public static int[] insertionSort(int[] arr) { 
     for (int i = 1; i < arr.length; i++) { 
      int j = i; 
      while (j > 0 && arr[j] < arr[j - 1]) { 
       // Swap 
       int tmp = arr[j]; 
       arr[j] = arr[j - 1]; 
       arr[j - 1] = tmp; 

       j--; 
      } 
     } 
     return arr; 
    } 

ワンあなたのコードの問題は、i-th要素を正しい位置に置くことになりますが、すでに正しい位置にあった要素の位置を混乱させる可能性があります。

挿入タイプの考え方は、i-th要素を正しい位置に挿入することです。これは、すべての要素を右側に移動する必要があることを意味します。しかし、あなたの場合、正確な位置を見つけたらj-th要素とi-thを交換するだけです。

例: 1 3 5 8 10が、これは、アレイ の現在の状態である今、あなたは要素6を挿入しようと、あなたが正しい位置が3であることがわかり、あなたがそれらを交換し、結果は次のとおりです。めちゃめちゃ 1 3 5 6 10 8番号8のポジションです。

+0

ご協力いただきありがとうございます。 –

関連する問題