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

PHP 實現冒泡排序算法:原理、過程與代碼優化

     編輯:PHP 相關知識

經典排序算法在 PHP 中的實現與分析

算法核心思想

冒泡排序通過重複遍歷數組,比較相鄰元素並交換順序,將較大(或較小)元素像氣泡一樣逐步「浮」到數組末端。每輪遍歷確定一個極值位置,需 n-1 輪完成排序。

排序過程演示(升序)

初始: 49 38 65 97 76 13 27
第1輪: 38 49 65 76 13 27 97  (97 確定)
第2輪: 38 49 65 13 27 76 97  (76 確定)
第3輪: 38 49 13 27 65 76 97  (65 確定)
第4輪: 38 13 27 49 65 76 97  (49 確定)
第5輪: 13 27 38 49 65 76 97  (38 確定)
第6輪: 13 27 38 49 65 76 97  (27 確定,提前結束可優化)

PHP 代碼實現

function bubbleSort(array &$arr): void {
    $n = count($arr);
    for ($i = 0; $i < $n - 1; $i++) {
        $swapped = false; // 優化標記:若無交換提前結束
        for ($j = 0; $j < $n - 1 - $i; $j++) {
            if ($arr[$j] > $arr[$j + 1]) {
                [$arr[$j], $arr[$j + 1]] = [$arr[$j + 1], $arr[$j]]; // 解構賦值交換
                $swapped = true;
            }
        }
        if (!$swapped) break; // 已有序
    }
}

// 測試
$data = [345, 4, 17, 6, 52, 16, 58, 69, 32, 8, 234];
bubbleSort($data);
print_r($data); // [4, 6, 8, 16, 17, 32, 52, 58, 69, 234, 345]

複雜度分析

指標數值說明
時間複雜度(最好)O(n)已有序數組,單輪無交換即結束
時間複雜度(平均/最壞)O(n²)逆序或隨機數組
空間複雜度O(1)原地排序,僅需常數額外空間
穩定性穩定相等元素相對位置不變

實際應用建議

  • 教學演示、極小數組(<50)、近乎有序數據可用。
  • 生產環境大數據排序嚴禁使用,應改用 sort()/usort()(C 級快速排序/混合排序,O(n log n))。
  • 面試常考:手寫冒泡、解釋優化點、對比快排/歸並排序優劣。

冒泡排序雖簡陋,但其「相鄰比較交換」的思想是理解更高級排序算法的基石。

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