冒泡排序是最基礎的交換排序算法,通過重複遍歷數組,比較相鄰元素並交換位置,將較大(或較小)元素逐步「冒泡」到數組末端。雖時間複雜度為 O(n²),不適合大數據量,但邏輯清晰,適合教學與小規模數據排序。
<?php
function bubble_sort(array $array): array {
$len = count($array);
// 外層控制已排序輪數
for ($i = 0; $i < $len - 1; $i++) {
// 內層遍歷未排序區間,每輪減少一個已定位元素
for ($j = 0; $j < $len - 1 - $i; $j++) {
// 升序:前者大於後者則交換
if ($array[$j] > $array[$j + 1]) {
$temp = $array[$j];
$array[$j] = $array[$j + 1];
$array[$j + 1] = $temp;
}
}
}
return $array;
}
// 測試
$a = [5, 1, 4, 7];
print_r(bubble_sort($a));
// 輸出: Array ( [0] => 1 [1] => 4 [2] => 5 [3] => 7 )
?>
sort()/rsort()(基於 QuickSort/Zend Sort,O(n log n)),僅在教學或極小數據(<50)且禁止內置函數時手寫冒泡。function bubble_sort_recursive(array $array, int $n = null): array {
$n = $n ?? count($array);
if ($n <= 1) return $array;
for ($i = 0; $i < $n - 1; $i++) {
if ($array[$i] > $array[$i + 1]) {
[$array[$i], $array[$i + 1]] = [$array[$i + 1], $array[$i]];
}
}
return bubble_sort_recursive($array, $n - 1);
}
冒泡排序通過雙層循環實現原地交換,空間複雜度 O(1),穩定排序。理解其「相鄰比較、大者後移」的核心邏輯,是掌握排序算法的入門基石。實際開發中優先使用語言內置高效排序函數。