第2回、バブルソートの解答例と修正です。
今回、広島県なみに「おしい」解答がありました。
for ($i = 0; $i < count($array)-1; $i++) { for ($j = $i+1; $j < count($array); $j++) { if ($array[$i] > $array[$j]) { $cache = $array[$i]; $array[$i] = $array[$j]; $array[$j] = $cache; } } }
ソートはされるのですが、「隣同士の比較」になっていないのです。動作確認ではなかなか検知不能ですが、不安定なソートになっています。「隣同士」を表現するために「$j」と「$j+1」を使ってみましょう。
for ($i = 0; $i < count($array)-1; $i++) { for ($j = 0; $j < count($array)-1-$i; $j++) { if ($array[$j] > $array[$j+1]) { $cache = $array[$j]; $array[$j] = $array[$j+1]; $array[$j+1] = $cache; } } }
「$j+1」を使うために内側のループ初期値と条件を変更しています。