目錄
1.冒泡排序
#2.選擇排序
#3.插入排序
4.快速排序
首頁 後端開發 php教程 php基礎演算法有哪幾種

php基礎演算法有哪幾種

Jun 18, 2019 pm 03:44 PM
php演算法

許多人都說演算法是程式的核心,一個程式的好與差,關鍵是這個程式演算法的優劣。作為一個初級phper,雖然很少接觸到演算法方面的東西 。但對於冒泡排序,插入排序,選擇排序,快速排序四種基本演算法,我想還是要掌握的。

php基礎演算法有哪幾種

相關推薦:《PHP教學

需求:分別用冒泡排序法,快速排序法,選擇排序法,插入排序法將下面數組中的值依照從小到的順序排序。

$arr=array(11,3,56,62,21,66,32,78,36,76,39,88,34);
登入後複製

1.冒泡排序

介紹:

#冒泡排序(Bubble Sort,台灣譯為:泡沫排序或氣泡排序)是一種簡單的排序演算法。它重複地走訪過要排序的數列,依次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

步驟:

1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數字。

3.針對所有的元素重複以上的步驟,除了最後一個。

4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

具體程式碼:

$arr=array(1,43,54,62,21,66,32,78,36,76,39);
function bubbleSort ($arr)
{
$len = count($arr);
//该层循环控制 需要冒泡的轮数
for ($i=1; $i<$len; $i++) {
//该层循环用来控制每轮 冒出一个数 需要比较的次数
for ($k=0; $k<$len-$i; $k++) {
if($arr[$k] > $arr[$k+1]) {
$tmp = $arr[$k+1]; // 声明一个临时变量
$arr[$k+1] = $arr[$k];
$arr[$k] = $tmp;
}
}
}
return $arr;
}
登入後複製

排序效果:
php基礎演算法有哪幾種

#2.選擇排序

##介紹:

選擇排序(Selection sort)是一種簡單直覺的排序演算法。它的工作原理如下。首先在未排序序列中找出最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末端。以此類推,直到所有元素都排序完畢。

具體程式碼:

//实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数
function select_sort($arr) {
//$i 当前最小值的位置, 需要参与比较的元素
for($i=0, $len=count($arr); $i<$len-1; $i++) {
//先假设最小的值的位置
$p = $i;
//$j 当前都需要和哪些元素比较,$i 后边的。
for($j=$i+1; $j<$len; $j++) {
//$arr[$p] 是 当前已知的最小值
if($arr[$p] > $arr[$j]) {
//比较,发现更小的,记录下最小值的位置;并且在下次比较时,应该采用已知的最小值进行比较。
$p = $j;
}
}
//已经确定了当前的最小值的位置,保存到$p中。
//如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可
if($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
//返回最终结果
return $arr;
}
登入後複製

排序效果:

php基礎演算法有哪幾種

#3.插入排序

介紹:

插入排序(Insertion Sort)的演算法描述是一種簡單直覺的排序演算法。它的工作原理是透過建立有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實作上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),因而在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

步驟:

1.從第一個元素開始,該元素可以認為已經被排序


#2.取出下一個元素,在已經排序的元素序列中從後向前掃描

3.如果該元素(已排序)大於新元素,將該元素移到下一位置


4.重複步驟3,直到找到已排序的元素小於或等於新元素的位置

5.將新元素插入到該位置中


6.重複步驟2

#具體程式碼:

function insert_sort($arr)
{
$len=count($arr);
for($i=1; $i<$len; $i++) {
//获得当前需要比较的元素值。
$tmp = $arr[$i];
//内层循环控制 比较 并 插入
for($j=$i-1; $j>=0; $j--) {
//$arr[$i];//需要插入的元素; $arr[$j];//需要比较的元素
if($tmp < $arr[$j]) {
//发现插入的元素要小,交换位置
//将后边的元素与前面的元素互换
$arr[$j+1] = $arr[$j];
//将前面的数设置为 当前需要交换的数
$arr[$j] = $tmp;
} else {
//如果碰到不需要移动的元素
//由于是已经排序好是数组,则前面的就不需要再次比较了。
break;
}
}
}
//将这个元素 插入到已经排序好的序列内。
//返回
return $arr;
}
登入後複製

排序效果:


php基礎演算法有哪幾種

4.快速排序

介紹:

快速排序是由東尼·霍爾所發展出來的排序演算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來,且在大部分真實世界的數據,可以決定設計的選擇,減少所需時間的二次方項可能性。

步驟:

1.從數列中挑出一個元素,稱為「基準」(pivot),


2.重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分區退出之後,該基準就處於數列的中間位置。這個稱為分割區(partition)操作。


3.遞歸地(recursive)將小於基準值元素的子數列和大於基準值元素的子數列排序。


具體程式碼:

function quick_sort($arr)
{
//判断参数是否是一个数组
if(!is_array($arr)) return false;
//递归出口:数组长度为1,直接返回数组
$length = count($arr);
if($length<=1) return $arr;
//数组元素有多个,则定义两个空数组
$left = $right = array();
//使用for循环进行遍历,把第一个元素当做比较的对象
for($i=1; $i<$length; $i++)
{
//判断当前元素的大小
if($arr[$i]<$arr[0]){
$left[]=$arr[$i];
}else{
$right[]=$arr[$i];
}
}
//递归调用
$left=quick_sort($left);
$right=quick_sort($right);
//将所有的结果合并
return array_merge($left,array($arr[0]),$right);
}
登入後複製
排序效果:

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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
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)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1323
25
PHP教程
1272
29
C# 教程
1251
24
PHP程式設計有哪些常見的演算法? PHP程式設計有哪些常見的演算法? Jun 12, 2023 am 08:30 AM

在PHP程式設計中,演算法是不可或缺的一部分。掌握常見的演算法,不僅可以提高程式碼效率,還可以為後續的程式設計提供協助。以下是PHP程式設計中常見的演算法:排序演算法排序演算法是指將一組資料依照一定的規則排列成有序的序列。在PHP編程中,常用的排序演算法有冒泡排序、插入排序、選擇排序、快速排序等。其中,快速排序是時間複雜度最低的一種排序演算法,適合處理大規模的資料。尋找演算法查找演算法

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

PHP是一種非常流行的程式語言,它支援各種資料類型和演算法,其中數組排序和搜尋演算法是基本且重要的部分。本文將會介紹PHP常用的陣列排序及搜尋演算法,以及它們的應用場景與效率分析。一、陣列排序PHP中提供了多種陣列排序的方法,包括冒泡排序、插入排序、選擇排序、快速排序、歸併排序等等。以下是對其中常用的幾種演算法的介紹及範例程式碼:冒泡排序(BubbleSort)冒

了解PHP資料結構和演算法 了解PHP資料結構和演算法 May 24, 2023 am 08:15 AM

PHP是一种广泛应用于Web开发的脚本语言,且在建立动态网站上表现得越来越好。在Web开发中,数据结构和算法的重要性并不低于其他编程范畴,其对于程序运行效率的影响尤为显著。尤其是在涉及大量数据存储和处理,或者对程序性能要求较高的场景下,数据结构和算法成为了不可忽视的一部分。本文主要介绍PHP中一些常用的数据结构和算法。一、数据结构数组PHP数组是一种非常常见

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

隨著網路的普及和應用的不斷擴大,程式語言的發展也變得越來越重要。 PHP作為一種非常流行的程式語言,也在不斷的發展中。 PHP開發者在使用PHP進行程式設計的過程當中,可能會面對到需要對一些知識進行表示,以及需要進行自動生成演算法的問題。那麼,PHP如何進行知識表示和自動生成演算法呢?以下本文將會對此進行探討。一、知識表示知識表示是人工智慧領域中非常重要的一個問題。知

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

PHP演算法解析:如何使用二分查找演算法在有序數組中快速定位元素?概述:二分查找演算法是一種高效率的查找演算法,它適用於有序數組中查找特定元素。本文將詳細介紹二分查找演算法的原理,並給出PHP程式碼範例。原理:二分查找演算法透過重複將查找範圍縮小一半,從而快速定位目標元素。其流程如下:首先,將查找範圍縮小為陣列的開頭和結尾;然後,計算中間元素的索引,將其與目標元素進行比較;

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

PHP演算法解析:如何使用動態規劃演算法解決0-1背包問題?引言:動態規劃是一種常用於解決最佳化問題的演算法想法。在程式開發中,0-1背包問題是一個經典的動態規劃應用場景。本文將介紹如何使用PHP編寫動態規劃演算法來解決0-1背包問題,並提供具體的程式碼範例。什麼是0-1背包問題? 0-1背包問題是經典的組合最佳化問題。題目設定如下:有一個背包,它的容量為C。現有n個物

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

深入理解PHP和Vue在腦圖功能中的核心演算法引言:在現代的網路時代,我們經常使用各種各樣的應用程式來幫助我們組織和管理資訊。腦圖是一種常見且實用的資訊組織方式,它能夠將複雜的思考過程以圖形化的方式展示出來。在本文中,我們將著重討論PHP和Vue在腦圖功能中的核心演算法,並給出程式碼範例。一、腦圖的特徵腦圖是一種以中心主題為核心,透過樹狀結構來展示與該主題相關的

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

PHP是一種廣泛應用的開發語言,常用於Web應用程式的開發。然而,Web應用程式往往需要處理大量的數據,包括資料的處理、儲存和查詢等等,因此,在PHP中應用演算法和資料結構是非常關鍵的技術。演算法是一種在電腦程式設計中用來解決問題的通用方法。在程式設計中,我們透過設計和實作演算法來解決問題,從而提高程式的效率、可維護性和可擴展性。常用的演算法包括排序、搜尋、分治、貪心等等

See all articles