首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實現冒泡排序算法詳解與代碼示例

     編輯:PHP 相關知識

PHP 實現冒泡排序算法詳解與代碼示例

冒泡排序是最基礎的交換排序算法,通過重複遍歷數組,比較相鄰元素並交換位置,將較大(或較小)元素逐步「冒泡」到數組末端。雖時間複雜度為 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 )
?>

執行過程圖解(以 [5,1,4,7] 為例)

第 1 輪 (i=0)

  • j=0: 5 > 1 ✓ → 交換 → [1, 5, 4, 7]
  • j=1: 5 > 4 ✓ → 交換 → [1, 4, 5, 7]
  • j=2: 5 > 7 ✗ → 不變 → [1, 4, 5, 7]
  • 本輪結束,最大值 7 已冒泡到末尾。

第 2 輪 (i=1)

  • j=0: 1 > 4 ✗ → 不變
  • j=1: 4 > 5 ✗ → 不變
  • 次大值 5 定位倒數第二。

第 3 輪 (i=2)

  • j=0: 1 > 4 ✗ → 不變
  • 最小值 1 自然沉底,排序完成。

優化方向

  1. 提前終止旗標:若某輪無任何交換,說明已有序,直接 break。
  2. 雞尾酒排序:雙向冒泡,減少「烏龜」(小元素在右端)慢速移動問題。
  3. 實際項目建議:直接使用 PHP 內置 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),穩定排序。理解其「相鄰比較、大者後移」的核心邏輯,是掌握排序算法的入門基石。實際開發中優先使用語言內置高效排序函數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved