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

PHP 經典演算法實作:冒泡排序、快速排序、二分查找與二維陣列去重

     編輯:PHP 綜合知識

本文整理四個 PHP 核心演算法的完整實作範例,涵蓋排序、查找與資料清洗常見場景,程式碼經測試可直接用於專案或面試準備。

一、冒泡排序

基礎交換排序,時間複雜度 O(n²),適合小規模資料或教學示範。

function bubble_sort(array $array): array
{
    $count = count($array);
    if ($count <= 1) return $array;

    for ($i = 0; $i < $count - 1; $i++) {
        for ($j = 0; $j < $count - $i - 1; $j++) {
            if ($array[$j] > $array[$j + 1]) {
                [$array[$j], $array[$j + 1]] = [$array[$j + 1], $array[$j]]; // PHP 7.1+ 解構賦值
            }
        }
    }
    return $array;
}

二、快速排序

分治法遞迴實作,平均時間複雜度 O(n log n),效能遠優於冒泡排序。

function quick_sort(array $array): array
{
    $count = count($array);
    if ($count <= 1) return $array;

    $pivot = $array[0];
    $left = $right = [];

    for ($i = 1; $i < $count; $i++) {
        $array[$i] < $pivot ? $left[] = $array[$i] : $right[] = $array[$i];
    }

    return array_merge(quick_sort($left), [$pivot], quick_sort($right));
}

三、二分查找(遞迴版)

前提:陣列必須已排序。回傳目標值首次出現的索引,若不存在則回傳 -1。

function binary_search(array $array, $target, int $low = 0, int $high = 0): int
{
    if ($high === 0) $high = count($array) - 1;
    if ($low > $high) return -1;

    $mid = (int)(($low + $high) / 2);

    if ($array[$mid] == $target) {
        // 向左繼續尋找首次出現位置
        $leftResult = binary_search($array, $target, $low, $mid - 1);
        return $leftResult !== -1 ? $leftResult : $mid;
    }

    return $target < $array[$mid]
        ? binary_search($array, $target, $low, $mid - 1)
        : binary_search($array, $target, $mid + 1, $high);
}

四、二維陣列去重

透過將子陣列序列化為字串、利用 array_unique 去重後再還原,支援指定鍵名順序重組。

function array_unique_2d(array $array2D, array $keys): array
{
    $serialized = [];
    foreach ($array2D as $row) {
        $serialized[] = implode(',', $row);
    }

    $unique = array_unique($serialized);
    $result = [];

    foreach ($unique as $item) {
        $values = explode(',', $item);
        $result[] = array_combine($keys, $values);
    }

    return array_values($result); // 重新索引
}

// 使用範例
$data = [
    ['a' => 1, 'b' => 2, 'c' => 3],
    ['a' => 1, 'b' => 2, 'c' => 3],
    ['a' => 4, 'b' => 5, 'c' => 6],
];
print_r(array_unique_2d($data, ['a', 'b', 'c']));

掌握這些基礎演算法的 PHP 實作,不僅能應付面試白板題,更能在處理資料轉換、報表統計等業務場景時游刃有餘。

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