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

PHP 入門教學:陣列排序 —— sort() 內建函式與冒泡排序演算法實作

     編輯:PHP 綜合知識

排序是資料處理高頻需求,PHP 提供 sort() 等內建函式 (C 底層實作、效能極佳),理解其行為與旗標至關重要;同時手寫經典演算法 (冒泡、快速) 能強化邏輯思維與面試準備。

內建 sort() 函式完整指南

<?php
$arr = [75, 32, 65, 98, 85, 12];
sort($arr);  // 就地排序,重建 0-based 索引
foreach ($arr as $k => $v) { echo $v . '&nbsp;'; }
// 輸出:12 32 65 75 85 98
?>

排序旗標 (flags) 選擇指南

旗標行為適用場景
SORT_REGULAR一般比較 (型別轉換後比較)預設,混合型別陣列
SORT_NUMERIC數值比較純數字陣列,避免字串比較 '10' < '2'
SORT_STRING字串比較純字串陣列
SORT_LOCALE_STRING依當地語系比較多語系排序需 setlocale()
SORT_NATURAL自然排序 (人類直覺)['img1','img2','img10'] 正確排序
SORT_FLAG_CASE不分大小寫 (搭配 STRING/NATURAL)案例不敏感排序

排序函式家族對照

函式排序依據索引處理關聯性保留
sort值重建 0-based否
rsort值 (降序)重建 0-based否
asort值保留鍵名是
arsort值 (降序)保留鍵名是
ksort鍵保留鍵名是
krsort鍵 (降序)保留鍵名是
usort自訂比較函式重建 0-based否
uasort自訂比較函式保留鍵名是
uksort鍵自訂比較保留鍵名是
natsort自然排序保留鍵名是
natcasesort自然排序不分大小寫保留鍵名是
array_multisort多陣列/多維排序視情況視情況

冒泡排序演算法 PHP 實作

<?php
$arr = [75, 32, 65, 98, 85, 12];
$n = count($arr);
for ($i = 0; $i < $n - 1; $i++) {           // 趟數:n-1 趟
    for ($j = 0; $j < $n - 1 - $i; $j++) {  // 每趟比較次數遞減
        if ($arr[$j] > $arr[$j + 1]) {      // 相鄰比較,大者後移
            $temp = $arr[$j];
            $arr[$j] = $arr[$j + 1];
            $arr[$j + 1] = $temp;
        }
    }
}
foreach ($arr as $k => $v) { echo $v . '&nbsp;'; }
// 輸出:12 32 65 75 85 98
?>

冒泡排序執行結果

演算法複雜度分析

指標冒泡排序PHP sort() (QuickSort/混合)
時間複雜度 (平均)O(n²)O(n log n)
時間複雜度 (最佳)O(n) (已排序 + 優化旗標)O(n log n)
時間複雜度 (最差)O(n²)O(n log n)
空間複雜度O(1) 原地O(log n) 堆疊
穩定性穩定不穩定 (QuickSort)
適用資料量< 50 (教學/極小資料)任意 (生產環境首選)

進階:快速排序 PHP 遞迴實作

<?php
function quickSort(array $arr) : array {
    if (count($arr) <= 1) return $arr;
    $pivot = $arr[0];
    $left = $right = [];
    for ($i = 1; $i < count($arr); $i++) {
        if ($arr[$i] < $pivot) $left[] = $arr[$i];
        else $right[] = $arr[$i];
    }
    return array_merge(quickSort($left), [$pivot], quickSort($right));
}
$arr = [75, 32, 65, 98, 85, 12];
print_r(quickSort($arr));
?>

實務選擇決策樹

需要排序?
  ├─ 關聯陣列需保留鍵值對應 → asort / arsort / ksort / uasort
  ├─ 純數值/字串陣列 → sort / rsort (加 SORT_NUMERIC/SORT_NATURAL)
  ├─ 多維/多鍵排序 → array_multisort
  ├─ 複雜自訂邏輯 → usort / uksort (回傳 -1/0/1)
  └─ 教學/面試/極小資料 → 手寫冒泡/快速/合併排序理解原理

常見陷阱

  • sort() 回傳 bool (成功/失敗),不是排序後陣列:$sorted = sort($arr) 錯誤,正確 sort($arr); $sorted = $arr;。
  • 字串數字排序未加 SORT_NUMERIC:['10','2'] → ['10','2'] (字典序),加旗標 → ['2','10']。
  • shuffle() 打亂陣列順序 (洗牌),同樣重建索引。
  • 多維陣列排序必須用 usort + 自訂比較函式或 array_multisort。

善用內建 sort() 家族函式解決 99% 生產排序需求,手寫演算法專注於理解原理與應對面試。

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