準備オーケー
<?php
$arr = [7, 1, 3, 2, 6, 5, 4, 0];
1つ、バブルソート
function bubbleSort($arr)
{
$len = count($arr);
if ($len <= 1) {
return $arr;
}
for ($i = 1; $i < $len; ++$i) {
for ($j = 0; $j < $len - $i; ++$j) {
if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j + 1];
$arr[$j + 1] = $arr[$j];
$arr[$j] = $temp;
}
}
}
return $arr;
}
- アイテムnとn + 1を比較し、nアイテム> n + 1アイテムの場合、位置を入れ替えます。
- 実際に順番に最大値を見つけます。
- forループの最初のレベルは、最大値を見つける回数を制御します。長さは-1回です。
- forループの2番目のレベルは境界を制御します。$ iは最後にソートされたいくつかの最大値を表します。
次に、並べ替えを選択します
function selectSort($arr)
{
$len = count($arr);
for ($i = 0; $i < $len; ++$i) {
$k = $i;
for ($j = $i + 1; $j < $len; ++$j) {
if ($arr[$j] < $arr[$k]) {
$k = $j;
}
}
if ($k !== $i) {
$temp = $arr[$k];
$arr[$k] = $arr[$i];
$arr[$i] = $temp;
}
}
return $arr;
}
- 0から始めて、最小値を逆方向に見つけてから、2つの位置を入れ替えます。次に、1から始めて、最小値を見つけます。
- forループの最初のレベルは、最小値を見つける回数、時間の長さ、およびバブリングと自己実現の違いを制御します。
- forループの2番目のレベルは開始位置を制御し、$ iの前にソートされています。
3、挿入ソート
function insertSort($arr)
{
$len = count($arr);
if ($len <= 1) {
return $arr;
}
for ($i = 1; $i < $len; ++$i) {
$temp = $arr[$i];
for ($j = $i - 1; $j > -1; --$j) {
if ($temp < $arr[$j]) {
$arr[$j + 1] = $arr[$j];
$arr[$j] = $temp;
} else {
break;
}
}
}
return $arr;
}
- 現在のアイテムが比較され、そのアイテムより大きくなるまで前方に交換され、ループがループから外れます。
- forループ制御の最初のレベルは、比較する必要のある項目の数を表します。
- forループの2番目のレベルは、左側の境界を制御します。
- バブリングに少し似ていますが、現在の値にのみ焦点を当て、その位置を見つけた直後に停止します。
4、クイックソート
function quickSort($arr)
{
$len = count($arr);
if ($len <= 1) {
return $arr;
}
$left = $right = [];
for ($i = 1; $i < $len; ++$i) {
if ($arr[$i] < $arr[0]) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
$left = quickSort($left);
$right = quickSort($right);
return array_merge($left, [$arr[0]], $right);
}
- 配列の最初の項目を標準として、他の項目を左右の配列に並べ替えてから、再帰的に操作します。
- 再帰再帰再帰再帰再帰。