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

PHP 冒泡排序實現:交換排序法代碼與優化方向

     編輯:PHP 綜合知識

基礎冒泡排序

<?php
$a = ['11','2','13','4','22'];
$n = count($a);
for ($i = 0; $i < $n; $i++) {
    for ($j = 0; $j < $n; $j++) {
        if ($a[$i] < $a[$j]) { // 升序:前者小於後者則交換
            $tmp = $a[$i];
            $a[$i] = $a[$j];
            $a[$j] = $tmp;
        }
    }
}
print_r($a);
// 輸出: Array ( [0] => 2 [1] => 4 [2] => 11 [3] => 13 [4] => 22 )
?>

算法分析

  • 時間複雜度:O(n²) 最好/平均/最壞。
  • 空間複雜度:O(1) 原地排序。
  • 穩定性:穩定(相等元素不交換)。
  • 本實現為**非標準冒泡**;標準冒泡內層迴圈範圍逐次縮小,並可加入「本輪無交換則提前結束」優化。

標準優化版

<?php
function bubbleSort(&$arr) {
    $n = count($arr);
    for ($i = 0; $i < $n - 1; $i++) {
        $swapped = false;
        // 最後 i 個元素已就位
        for ($j = 0; $j < $n - 1 - $i; $j++) {
            if ($arr[$j] > $arr[$j + 1]) {
                [$arr[$j], $arr[$j + 1]] = [$arr[$j + 1], $arr[$j]]; // PHP 7.1+ 解構交換
                $swapped = true;
            }
        }
        if (!$swapped) break; // 本輪無交換,已有序
    }
}
?>

對比:內置 sort() vs 冒泡

特性sort()冒泡排序
實現C 級 Quicksort/合併排序混合PHP 級雙重迴圈
速度極快 (O(n log n))極慢 (O(n²))
穩定性不穩定穩定
適用場景生產環境所有排序教學、極小數據、特定約束

總結

冒泡排序僅供**算法學習、面試、極小規模數據(<50)**使用。生產代碼**務必使用內置 sort()/usort()/asort() 等**,性能差距達數量級。

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