2つのバブルアルゴリズムを見つけましたが、どちらが正しいかわかりません...
最初の例:
for (int i = 1; i < input.Length-1; i++)
for (int j = 0; j < input.Length - 1 - i; j++)
if (input[j] > input[j + 1])
swap(input, j, j + 1);
2番目の例:
for (int i = 1; i < input.Length-1; i++)
for (int j = 0; j < input.Length - 1; j++)
if (input[j] > input[j + 1])
swap(input, j, j + 1);
ウィキペディアの例
入力用:5 1 4 2 8
最初の例:6つの比較
2番目の例:12の比較
ファーストパス:
(5 1 4 2 8)->(1 5 4 2 8)、5>1からスワップ
(1 5 4 2 8)->(1 4 5 2 8)、5>4からスワップ
(1 4 5 2 8)->(1 4 2 5 8)、5>2からスワップ
(1 4 2 5 8)->(1 4 2 5 8)
セカンドパス:
(1 4 2 5 8)->(1 4 2 5 8)
(1 4 2 5 8)->(1 2 4 5 8)、4>2 <-例1はここで停止するのでスワップ
(1 2 4 5 8)->(1 2 4 5 8)
(1 2 4 5 8)->(1 2 4 5 8)
サードパス
(1 2 4 5 8)->(1 2 4 5 8)
(1 2 4 5 8)->(1 2 4 5 8)
(1 2 4 5 8)->(1 2 4 5 8)
(1 2 4 5 8)->(1 2 4 5 8)<-例2ここで停止
編集:私がどちらが正しいかを言うとき、私はどちらが元のバブルソートであるかを意味します