php練習問題1では、配列の大きい値を抽出する事を学びました。
では、練習問題2では、配列の値を降順に並び替えるためのアルゴリズムと
考え方を学びます
学習後は、php組込み関数を使わずに、配列を降順、昇順に並び替える事ができます。
php組込み関数を使わないで配列を降順に並べる
下記の配列を降順に並び替えるにはどうしたら良いでしょうか?
並び替え前
$array = [30, 5, 90, 16];
降順に並び替え
$array = [90, 30, 16, 5];
まずはアルゴリズムで考えてみましょう
下記の配列を降順に入れ替えるための手順を考えていきます
まず、先頭の配列の要素とそれ以降の要素を順に比較していきます
30 | 5 | 90 | 16 |
30と5を比較する
30が大きいので、入れ替えしません
30と90を比較する
90が大きいので30と90を入れ替えます
90 | 5 | 30 | 16 |
90と16を比較する
90が大きいので、入れ替えはなし
90 | 5 | 30 | 16 |
一番大きい値は90が確定しました。
次に90の次の要素5と他の要素を比較します
90 | 5 | 30 | 16 |
5と30を比較する
30が大きいので5と30を入れ替えます
90 | 30 | 5 | 16 |
30と16を比較します
30が大きいので入れ替えはなし
90 | 30 | 5 | 16 |
2番目に大きい値は30が確定しました。
次に5と最後の要素を比較します
90 | 30 | 5 | 16 |
5と16を比較する
16が大きいので5と16を入れ替えます
90 | 30 | 16 | 5 |
これで降順にいれかわりました
このアルゴリズムをロジックに起こしていきます。
配列を降順に並び替えるサンプルプログラムで確認してみましょう
<?php
// 配列を定義
$array = [30, 5, 90, 16];
// 配列の要素数を取得
$count = count($array);
$i = 0;
for (; $i < $count; $i++) {
for ($j = $i + 1; $j < $count; $j++) {
// $array[$i]の次の要素$array[$j]を比較する
if ($array[$i] < $array[$j]) {
// $array[$j]の値が大きい場合
// 変数$tmpに$array[$i]を代入する
$tmp = $array[$i];
// $array[$i]に$aarray[$j]の値を代入する 大きい値
$array[$i] = $array[$j];
// $array[$j]に$tmpの値を代入する 小さい値
$array[$j] = $tmp;
}
}
}
//配列を出力します
var_dump($array);
?>
php組込み関数を使わないで配列を昇順に並べる
昇順に並び替える方法は降順に並び替える手順とかわりません。
変更するところは、比較条件箇所の大なり小なりの比較条件を変更するだけです。
配列を昇順に並び替えるサンプルプログラムで確認してみましょう
<?php
// 配列を定義
$array = [30, 5, 90, 16];
// 配列の要素数を取得
$count = count($array);
$i = 0;
for (; $i < $count; $i++) {
for ($j = $i + 1; $j < $count; $j++) {
// $array[$i]の次の要素$array[$j]を比較する
if ($array[$i] > $array[$j]) {
// $array[$j]の値が小さい場合
// 変数$tmpに$array[$i]を代入する
$tmp = $array[$i];
// $array[$i]に$aarray[$j]の値を代入する 小さい値
$array[$i] = $array[$j];
// $array[$j]に$tmpの値を代入する 大きい値
$array[$j] = $tmp;
}
}
}
//配列を出力します
var_dump($array);
?>
上記のコードをコピペして下記のサイトで実際にPHPコードを実行してみましょう
本サイトでは、基礎的な学習は開発環境を構築しないで、webで実行します。
コピペで動作したら、今度は自分で実際にコードをトレースしてコーディングしてみましょう
効率的にプログラムを学習するなら必ず、手打ちすることです。
打つことで、アウトプットして覚えていきます。