2017-11-10 12 views
0

誰かがこれがうまくいかない理由を説明できますか?
たとえば、私はこの配列を持っています:3 4 1 2 55 32 1111 53
出力は3 3 3 4 32 53 55 1111になります。
ありがとう!挿入の並べ替えを書く方法

void insertionSort(int arr[], int len) { 
int i, j, tmp; 
for (i = 1; i < len; i++) { 
    tmp = arr[i]; 
    for (j = i - 1; j >= 0; j--) { 
     if (arr[j] > tmp) { 
      arr[j + 1] = arr[j]; 
     } 
     else { 
      arr[j + 1] = tmp; 
      break; 
     } 
    } 
}} 
+3

デバッガーについて注意してください。デバッガを使用します。デバッガを使用すると、プログラムで変数を見る*値を1歩歩くことができます。デバッガを使用する方が、StackOverflowに正しくポストして誰かがあなたのコードを検査したりデバッグしたりするよりも、しばしば速いです。デバッグセッションのテキストで投稿を編集してください。 –

+2

上から外れると、あなたは決して 'arr [0]'に割り当てられません。それは正しいことではありません。 –

+1

最高の結果を得るには、a [mcve]を流してください。スタックオーバーフロー問題の有無に関わらず、これを行う必要があります。なぜなら、MCVEを生成するために問題を分離する行為は、そのバギーの栄光の中で非常に多くの原因を明らかにするからです。 – user4581301

答えて

1

投稿した内容は、Wikipedia擬似コードの翻訳ではありません。

void insertion_sort(int arr[], const int len) { 
    for (int i = 1; i < len; ++i) { 
     int x = arr[i]; 
     int j = i-1; 
     while((j >= 0)&&(arr[j] > x)) { 
      arr[j + 1] = arr[j]; 
      j = j-1; 
     } 
     arr[j+1] = x; 
    } 
} 

ようこそStackOverlow。別の質問を投稿する前に、Askingに関するすべてのリンクをお読みください。詳細については、MCVE

+0

ありがとうございました!私の "翻訳"がどこに間違っているか教えてください。私は本当に興味があります。 whileループはforループとして記述できますか?私は新しいアルゴリズムを学びたいと思っています。何が間違っているか教えていただければ幸いです。 – puls99

+0

これを試してください。 insert_sortとbad_insertion_sortの両方のアルゴリズムを実装します。同じ入力を使用してデバッガでステップを踏んでください。彼らはどこに発散することに注意してください。 –

関連する問題