2017-11-28 8 views
0

バブルソートアルゴリズムの最も一般的な方法は、forループを2つ持つことです。 j = 0からj n-i-1までの内の1つが行われる。最後の要素に到達すると、要素を持たないので比較しないので、マイナスiを差し引くと仮定します。しかしなぜ私たちはn-1を使うのでしょうか?なぜ私たちは外側のループをi = 0からi < nまで、そしてj = 0からn-iまでの内部まで実行しないのですか?誰かが私にそれを説明することができます、インターネット上のチュートリアルはこれを強調していません。バブルソートアルゴリズムでn-1回の繰り返しを行う理由

for (int i = 0; i < n - 1; i++) // Why do we have n-1 here? 
    { 
     swapped = false; 
     for (int j = 0; j < n - i - 1; j++) 
     { 
      countComparisons++; 
      if (arr[j] > arr[j + 1]) 
      { 
       countSwaps++; 
       swap(&arr[j], &arr[j + 1]); 
       swapped = true; 
      } 

     } 
    } 

たとえば、6個の要素からなる配列がある場合、5回繰り返すだけでよいのですが、なぜですか?

答えて

7

スワップには少なくとも2つの要素が必要なためです。

したがって、6つの要素がある場合は、5つの連続するペアを考慮する必要があります。

+1

そして、私は正しくn-i-1を理解しましたか?私たちが彼の後ろに要素を持っていないので、配列の最後の項目の比較をスキップするつもりですか? – CaL17

+1

@ CaL17配列のソートされていない部分の最後の項目 – Caleth