php練習問題2

php練習問題1では、配列の大きい値を抽出する事を学びました。

では、練習問題2では、配列の値を降順に並び替えるためのアルゴリズムと
考え方を学びます

学習後は、php組込み関数を使わずに、配列を降順、昇順に並び替える事ができます。

php組込み関数を使わないで配列を降順に並べる

下記の配列を降順に並び替えるにはどうしたら良いでしょうか?
並び替え前
$array = [30, 5, 90, 16];
降順に並び替え
$array = [90, 30, 16, 5];

まずはアルゴリズムで考えてみましょう

下記の配列を降順に入れ替えるための手順を考えていきます
まず、先頭の配列の要素とそれ以降の要素を順に比較していきます

30 5 90 16

305を比較する
30が大きいので、入れ替えしません

3090を比較する
90が大きいので3090を入れ替えます

90 5 30 16

9016を比較する
90が大きいので、入れ替えはなし

90 5 30 16

一番大きい値は90が確定しました。
次に90の次の要素5と他の要素を比較します

90 5 30 16

530を比較する
30が大きいので530を入れ替えます

90 30 5 16

3016を比較します

30が大きいので入れ替えはなし

90 30 5 16

2番目に大きい値は30が確定しました。

次に5と最後の要素を比較します

90 30 5 16

516を比較する
16が大きいので516を入れ替えます

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で実行します。
コピペで動作したら、今度は自分で実際にコードをトレースしてコーディングしてみましょう
効率的にプログラムを学習するなら必ず、手打ちすることです。
打つことで、アウトプットして覚えていきます。

ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO
paiza.IOはオンラインですぐにプログラミングが始められる、オンライン実行環境です。Java,Ruby,Python,PHP,Perlなど主要24言語に対応。プログラミング学習にも。

 

タイトルとURLをコピーしました