首頁 後端開發 php教程 PHP中的數組排序及搜尋演算法

PHP中的數組排序及搜尋演算法

Jun 23, 2023 am 09:45 AM
php演算法 php數組排序 php數組搜尋

PHP是一種非常流行的程式語言,它支援各種資料類型和演算法,其中數組排序和搜尋演算法是基本且重要的部分。本文將會介紹PHP常用的陣列排序及搜尋演算法,以及它們的應用場景與效率分析。

一、陣列排序

PHP中提供了多種陣列排序的方法,包括冒泡排序、插入排序、選擇排序、快速排序、歸併排序等等。以下是對其中常用的幾種演算法的介紹及範例程式碼:

  1. 冒泡排序(Bubble Sort)

冒泡排序是一種簡單卻低效的排序演算法,其基本思想是從數組的第一個元素開始,依序比較相鄰元素的大小,若左邊元素大於右邊元素,則交換它們的位置。這樣一輪比較下來,最大的元素就移到了陣列的末端。接著再從第一個元素開始,重複上述操作,其時間複雜度為O(n^2)。

範例程式碼:

function bubble_sort($arr) {
    $len = count($arr);
    for ($i = 0; $i < $len - 1; $i++) {
        for ($j = 0; $j < $len - $i - 1; $j++) {
            if ($arr[$j] > $arr[$j + 1]) {
                $temp = $arr[$j];
                $arr[$j] = $arr[$j + 1];
                $arr[$j + 1] = $temp;
            }
        }
    }
    return $arr;
}
登入後複製
  1. 插入排序(Insertion Sort)

插入排序是一種相對簡單的排序演算法,其基本思想是將一個待排序的資料插入到已經有序的序列中,以達到排序的目的。假設前面的元素已經排序好,從陣列的第二個元素開始向前尋找合適的位置進行插入操作。與冒泡排序類似,其時間複雜度也為O(n^2)。

範例程式碼:

function insertion_sort($arr) {
    $len = count($arr);
    for ($i = 1; $i < $len; $i++) {
        $temp = $arr[$i];
        for ($j = $i - 1; $j >= 0 && $arr[$j] > $temp; $j--) {
            $arr[$j + 1] = $arr[$j];
        }
        $arr[$j + 1] = $temp;
    }
    return $arr;
}
登入後複製
  1. 快速排序(Quick Sort)

快速排序是常用的高效排序演算法,其基本想法是選取陣列中任一個元素作為基準值,然後將剩餘的元素分成兩個子序列:左邊的數都比基準值小,右邊的數都比基準值大。接著再對左、右子序列重複以上步驟,直到子序列的長度為1或0。快速排序的時間複雜度為O(n log2 n),且它是不穩定排序。

範例程式碼:

function quick_sort($arr) {
    $len = count($arr);
    if ($len <= 1) {
        return $arr;
    }
    $pivot_key = $arr[0];
    $left_arr = array();
    $right_arr = array();
    for ($i = 1; $i < $len; $i++) {
        if ($arr[$i] <= $pivot_key) {
            $left_arr[] = $arr[$i];
        } else {
            $right_arr[] = $arr[$i];
        }
    }
    $left_arr = quick_sort($left_arr);
    $right_arr = quick_sort($right_arr);
    return array_merge($left_arr, array($pivot_key), $right_arr);
}
登入後複製

二、陣列搜尋

PHP中的陣列搜尋演算法主要包括線性搜尋、二分搜尋和雜湊搜尋。以下是對其中常用的幾種演算法的介紹及範例程式碼:

  1. 線性搜尋(Linear Search)

線性搜尋是一種簡單的查找演算法,其基本想法是從陣列的第一個元素開始,逐一比較元素的值和關鍵字是否相同,若存在則傳回該元素的下標,否則回傳-1。線性搜尋的時間複雜度為O(n)。

範例程式碼:

function linear_search($arr, $key) {
    $len = count($arr);
    for ($i = 0; $i < $len; $i++) {
        if ($arr[$i] == $key) {
            return $i;
        }
    }
    return -1;
}
登入後複製
  1. 二分搜尋(Binary Search)

二分搜尋也稱折半查找,其基本想法是將有序數組分成兩部分,每次比較中間元素和關鍵字的大小,若相等則傳回該元素的下標,否則根據大小關係將搜尋範圍縮小一半,直到找出目標元素。二分搜尋的時間複雜度為O(log2 n)。

範例程式碼:

function binary_search($arr, $key) {
    $low = 0;
    $high = count($arr) - 1;
    while ($low <= $high) {
        $mid = floor(($low + $high) / 2);
        if ($arr[$mid] == $key) {
            return $mid;
        } elseif ($arr[$mid] > $key) {
            $high = $mid - 1;
        } else {
            $low = $mid + 1;
        }
    }
    return -1;
}
登入後複製
  1. 哈希搜尋(Hash Search)

哈希搜尋是一種利用哈希表的高效查找演算法。其基本概念是將每個元素的關鍵字映射到雜湊表中,透過一個雜湊函數計算出其所在的位置,然後在該位置中尋找所需元素。哈希搜尋的時間複雜度為O(1),但是需要建構和維護哈希表。

以上就是PHP中常用的陣列排序及搜尋演算法的介紹及範例程式碼,根據實際應用場景和資料規模選擇不同的演算法可以提高程式碼的效率。

以上是PHP中的數組排序及搜尋演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP程式設計有哪些常見的演算法? PHP程式設計有哪些常見的演算法? Jun 12, 2023 am 08:30 AM

PHP程式設計有哪些常見的演算法?

PHP中的數組排序及搜尋演算法 PHP中的數組排序及搜尋演算法 Jun 23, 2023 am 09:45 AM

PHP中的數組排序及搜尋演算法

如何使用PHP數組進行資料排序和篩選 如何使用PHP數組進行資料排序和篩選 Jul 15, 2023 pm 12:57 PM

如何使用PHP數組進行資料排序和篩選

PHP中如何進行知識表示和自動生成演算法? PHP中如何進行知識表示和自動生成演算法? May 22, 2023 pm 08:10 PM

PHP中如何進行知識表示和自動生成演算法?

深入理解PHP和Vue在腦圖功能的核心演算法 深入理解PHP和Vue在腦圖功能的核心演算法 Aug 15, 2023 pm 01:00 PM

深入理解PHP和Vue在腦圖功能的核心演算法

PHP演算法解析:如何使用動態規劃演算法解決0-1背包問題? PHP演算法解析:如何使用動態規劃演算法解決0-1背包問題? Sep 19, 2023 pm 12:33 PM

PHP演算法解析:如何使用動態規劃演算法解決0-1背包問題?

PHP演算法解析:如何使用二分查找演算法在有序數組中快速定位元素? PHP演算法解析:如何使用二分查找演算法在有序數組中快速定位元素? Sep 19, 2023 pm 01:14 PM

PHP演算法解析:如何使用二分查找演算法在有序數組中快速定位元素?

PHP中的演算法和資料結構 PHP中的演算法和資料結構 May 25, 2023 am 08:51 AM

PHP中的演算法和資料結構

See all articles