PHP

[PHP] [初心者]sort関数を使わずに並び替えする方法

More than 1 year has passed since last update.

初めに

sort関数を使わずに並び替えさせていこうと思います。
確かにsort関数を使えば、簡単に終わることなのですが、私にとってはプログラミングの勉強になることだったので投稿することにしました。
並び替えをするアルゴリズムは、いくつかありますが、その中でも、もっとも簡単なバブルソートをご紹介します。

バブルソートとは

バブルソートの仕組みは、とても単純です。
隣にある要素と比較して、順序が逆だった場合、要素を交換していくだけです。
この作業を要素数-1だけ繰り返すだけで、並び替えを行います。
これから、昇順にするバブルソートを紹介します。

バブルソートのコード

function bubble_sort(&$array){
    $size = count($array);
    for ($i = 0; $i < $size; $i++) {
        for ($j = 0; $j < ($size - 1 - $i); $j++) {
            if ($array[$j + 1] < $array[$j]) {
                $tmp = $array[$j + 1];
                $array[$j + 1] = $array[$j];
                $array[$j] = $tmp;
            }
        }
    }
}

$array = [100, 3, 30, 20, 44, 32];
bubble_sort($array);
echo implode(",", $array).PHP_EOL;

結果は以下のようになります。

3,20,30,32,44,100

しっかり昇順になっていますね!
解説が必要そうなところは、$size - 1 - $iの部分くらいだと思います。
並び替え($i)が進むたびに、最後尾の要素は決まって行くので$size - 1 - $iとして並び替えする回数を減らしていくというイメージです。

最後に

バブルソートを紹介しましたが、他にもマージソート、クイックソートなど色々あります。
この記事で初めて知ったという方や、興味を持ったという方がいましたら是非調べて見てください!!