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回繰り返すだけでよいのですが、なぜですか?
そして、私は正しくn-i-1を理解しましたか?私たちが彼の後ろに要素を持っていないので、配列の最後の項目の比較をスキップするつもりですか? – CaL17
@ CaL17配列のソートされていない部分の最後の項目 – Caleth