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

PHP 實現簡單選擇排序算法:原理、代碼與優化分析

     編輯:PHP 綜合知識

算法原理

簡單選擇排序的核心思想:每輪從未排序區間選出最小(或最大)元素,與該區間首位元素交換。具體步驟:

  1. 外層循環遍歷數組索引 $i(0 到 n-1)
  2. 假設當前 $i 位置即最小值,記錄索引 $min = $i
  3. 內層循環掃描 $i+1 到末尾,發現更小值則更新 $min
  4. 掃描結束後,若 $min !== $i 則交換兩者位置

時間複雜度:O(n²),空間複雜度:O(1),屬於不穩定排序。

PHP 實現代碼

<?php
/**
 * 簡單選擇排序
 * @param array $list 待排序數組(引用傳遞修改原數組)
 * @return array 排序後數組
 */
function sort_simple_selection(array &$list): array {
    $len = count($list);
    if ($len <= 1) return $list;

    for ($i = 0; $i < $len; $i++) {
        $min = $i;
        for ($j = $i + 1; $j < $len; $j++) {
            // 升序:< ;降序:>
            if ($list[$j] < $list[$min]) {
                $min = $j;
            }
        }
        // 可選:輸出每輪過程用於教學演示
        // echo implode(',', $list) . "#pos=" . ($min + 1) . " min=" . $list[$min] . "<br/>";
        
        if ($min != $i) {
            [$list[$i], $list[$min]] = [$list[$min], $list[$i]]; // PHP 7.1+ 解構賦值交換
        }
        // echo "-------------------------<br/>";
    }
    return $list;
}

// 測試
$list = [4, 3, 2, 1, 5, 7, 3, 7];
sort_simple_selection($list);
var_dump($list); // [1, 2, 3, 3, 4, 5, 7, 7]

關鍵優化點

  • 引用傳遞:函數簽名使用 array &$list 避免大數組拷貝
  • 邊界檢查:空數組或單元素直接返回
  • 現代語法:使用解構賦值 [$a, $b] = [$b, $a] 替代臨時變量交換
  • 類型聲明:參數與返回值聲明 array 增強可讀性

教學演示輸出

若保留註釋中的輸出代碼,執行過程將顯示每輪掃描狀態:

4,3,2,1,5,7,3,7#pos=4 min=1
-------------------------
1,3,2,4,5,7,3,7#pos=3 min=2
-------------------------
1,2,3,4,5,7,3,7#pos=7 min=3
-------------------------
...

這對理解算法流程極有幫助,生產環境請移除。

何時使用選擇排序?

優勢劣勢適用場景
實現簡單、無額外空間O(n²) 效率低教學演示、極小數據集(<50)、內存極受限環境
交換次數最少(最多 n-1 次)不穩定排序寫入成本極高的存儲介質(如 EEPROM)

生產環境建議

實際項目中請直接使用 PHP 內建 sort() / rsort()(基於快速排序變體),性能優於手寫 O(n²) 算法數個數量級:

sort($list, SORT_NUMERIC); // 升序
rsort($list, SORT_NUMERIC); // 降序
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved