今天練習時間複雜度為 O(n^2) 的排序演算法
定義陣列
$arr = [4,5,6,3,2,1];
$length = count($arr);
氣泡排序
for ($i = 0; $i < $length; $i++) { //迴圈次數
$change = false; //資料是否有交換
for ($j = 0; $j < $length - $i - 1 ; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
$tmp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $tmp;
$change = true;
}
}
if (!$change) {
break;
}
}
插入排序
for ($i = 1; $i < $length; $i++) {
$value = $arr[$i];
for ($j = $i - 1; $j >= 0; $j--) {
if ($arr[$j] > $value) {
$arr[$j + 1] = $arr[$j];
} else {
break;
}
}
$arr[$j + 1] = $value;
}
選擇排序
for ($i = 0; $i < $length; $i++) {
$minIndex = $i; //最小值的下標預設為 `i`
for ($j = $length - 1; $j > $i; $j--) {
if ($arr[$j] < $arr[$minIndex]) {
$minIndex = $j; //最小值下標
}
}
$tmp = $arr[$i];
$arr[$i] = $arr[$minIndex];
$arr[$minIndex] = $tmp;
}