0
0

More than 1 year has passed since last update.

phpで応用情報のバブルソートをコード化した

Last updated at Posted at 2023-08-01

概要

応用情報の問題を解いている時にバブルソートの問題を見つけたので、それをプログラムで書いてみました。

バブルソートとは?

隣り合う数字を比較し、昇順の場合は左側の数字が大きければ順番を入れ替えます。降順の場合は右側の数字が大きければ順番を入れ替えます。

応用情報問題 https://www.ap-siken.com/s/kakomon/04_aki/q6.html

完成コード

<?php
$a = ["2", "1", "0"];

for($i = 0; $i <= count($a) - 1 ; $i++){

for($j = count($a) - 1 ; $j >= $i + 1 ; $j--){

if($a[$j] < $a[$j - 1]){
    $w = $a[$j];
    $a[$j] = $a[$j - 1];
    $a[$j - 1] = $w;
}

    }
    echo $a[$i];
}
?>

配列はarrayでも上記のような書き方でも可です。

応用情報では大文字のAですが、こちらは小文字で書いてます。特に意味はありません。

解説

<?php
$a = ["2", "1", "0"];

for($i = 0; $i <= count($a) - 1 ; $i++){

for($j = count($a) - 1 ; $j >= $i + 1 ; $j--){

今回の問題の
初期値0、増分1、終値n-1
ここのnは配列の要素数を表しています。
それぞれiとjに割り当てています。

for文のiは要素数を割り当てます。
もちろんプログラムなので0からです。
配列に値を入れると0=>[2]、1=>[1]、2=>[0]となります

jは要素数を表す変数であり、初期値はn、増分は-1、終値はi+1となります。

if文

if($a[$j] < $a[$j - 1]){
    $w = $a[$j];
    $a[$j] = $a[$j - 1];
    $a[$j - 1] = $w;
}

if文で順番を変えるコードを書きます。

プログラムは人間みたいに、すぐに順番を変えることができません。

一度別の変数に値を入れておく必要があります。
仮に
$j = 1とします

今回は$wに $a[$j]
を挿入します。

$jが1で、$a[1]になるので、
$a[$j] = 1です。

こちらは$a[0]なので
$a[$j - 1]= 2です。

if文の右側をすべて数字にすると
$w = 1;

$a[$j] = 2

$a[$j - 1] = 1
こうなります。
逆になりました。

これでaの中身が上書きされます。

それで順番通りになるわけです。

結論

ムズイ!でも理解できれば楽しいですね。
この問題を理解するのに1日費やしましたが、いい経験でした。

間違ってたらごめんなさい!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0