コードを読んでバブルソートを理解しました。健忘録です。まだ、プログラミングをはじめて3か月なのでやっとこ理解できた感じです。(*'ω'*)
$a = [98, 10, 56, 8]; という配列をソートします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $a = [98, 10, 56, 8]; for($i = 0; $i < count($a)-1; $i++) { for($j = $i+1; $j < count($a); $j++) { if($a[$i] > $a[$j]) { $tmp = $a[$i]; $a[$i] = $a[$j]; $a[$j] = $tmp; } } } foreach($a as $value) { echo $value. "\n"; } ?> |
$a = [98, 10, 56, 8];
$iの1回転目
$jの1回転目
$i = 0
$j = 1
1 |
if($a[$i] > $a[$j]) |
98>10 //成立する
$tmp 98 = $a[0] 98
$a[0] 10 = $a[1] 10
$a[1] 98 = $tmp 98
$a[0]の98と$a[1]の10が入れ替わりました。
$iの1回転目
$jの2回転目
$i = 0
$j = 2
1 |
if($a[$i] > $a[$j]) |
10>56 //成立しない
ここでは、入れ替わりはありません。
$iの1回転目
$jの3回転目
$i = 0
$j = 3
1 |
if($a[$i] > $a[$j]) |
10>8 //成立する
$tmp 10 = $a[0] 10
$a[0] 8 = $a[3] 8
$a[3] 10 = $tmp 10
$j = 4になると、$j < count($a)は4なので成立しないため、$jループが終わる。
$a[0]の10と$a[3]の8が入れ替わりました。
$iの2回転目
$jの1回転目
$i = 1
$j = 2
1 |
if($a[$i] > $a[$j]) |
98>56 //成立する
$tmp 98 = $a[1] 98
$a[1] 56 = $a[2] 56
$a[2] 98 = $tmp 98
$a[1]の98と$a[2]の56が入れ替わりました。
$iの2回転目
$jの2回転目
$i = 1
$j = 3
1 |
if($a[$i] > $a[$j]) |
56>10 //成立する
$tmp 56 = $a[1] 56
$a[1] 10 = $a[3] 10
$a[3] 56 = $tmp 56
$j = 4になると、$j < count($a)は4なので成立しないため、$jループが終わる。
$a[1]の56と$a[3]の10が入れ替わりました。
$iの3回転目
$jの1回転目
$i = 2
$j = 3
1 |
if($a[$i] > $a[$j]) |
98>56 //成立する
$tmp 98 = $a[2] 98
$a[2] 56 = $a[3] 56
$a[3] 98 = $tmp 98
$j = 4になると、$j < count($a)は4なので成立しないため、$jループが終わる。
$i = 3になると、$i < count($a)-1は3なので成立しないため、$iループが終わる。
$a[2]の98と$a[3]の56が入れ替わりました。
これで、小さい順のソートができました。
大きい順にするときは、if($a[$i] < $a[$j])の不等号を逆にすると降順になります。