首頁 >後端開發 >php教程 >PHP實作陣列排序的方法:快速排序,插入排序,歸併排序演算法

PHP實作陣列排序的方法:快速排序,插入排序,歸併排序演算法

不言
不言原創
2018-07-19 14:20:421637瀏覽

php中對於陣列的排序方法是有很多種的,每種陣列排序也都有各自不同的原理,下面就來具體看一下關於快速排序演算法,歸併排序演算法以及插入排序演算法的範例。

異形陣列的遍歷

求如下數組中數字的平均值:

$arr1 = array(
1, 2, array(31, 32, 33), 4,
array(51, 52, 53, array(541, 542, 543, 544) ),
6, array(71, 72, 73),
);
$count = 0; //计数
$sum = GetArraySum($arr1);
echo “\

快速排序演算法

原理描述:

對於這樣一個陣列:[5, 1,2, 6,7];

#取出第一項(並作為中間陣列),並將其餘項與其比較後,分成兩個陣列:

左邊陣列項目比中間項小,右邊陣列不比中間項小。

如果左邊數組和右邊數組已經是排好序的數組,則將這3者合併起來,就是最終結果。

如果左邊數組和右邊數組還不是排好序的數組,則繼續遞歸使用本函數來取得有序數組。

原理圖:

PHP實作陣列排序的方法:快速排序,插入排序,歸併排序演算法

#原理資料:

$arr1 = [5, 2, 1, 6,7]; / /有力說明原理的數據1

小的:[2, 1], 大的:[6, 7], 中間的: [5]

將三者合併: [1 , 2, 5, 6, 7];

$arr1 = [2, 1]; //有力說明原理的資料2

中間:[2], 左邊:[1] , []

特定案例:

$arr1 = [5, 2, 4, 6, 1, 3];
$arr1 = [5, 2, 4, 6, 1, 3];
//$arr1 = [5, 3, 2, 8, 7];
echo “\

插入排序演算法

#原理描述:

對於這樣一個陣列:[2 , 3, 4, 1];

要將某個數n插入到一個已經排好序的數組中,

#只要將n跟這個數組的項從後往前一個一個對比,只要發現某項比n大,

就將該項後移一位,然後繼續往前取出並對比,比n大就往後移動一位,以此類推。

最後沒有比n大的時候,就把n放入到剛才往後移動時空出來的那個位置上。

對於一個數組,第1項就可以當做一個“已經排好序”的數組,

則第2項就可以遵照上述原理來進行“插入排序”,於是前兩個就可以排好,

並成為了具有兩個元素的「排好序的陣列」。後續以此類推。

原理圖:

PHP實作陣列排序的方法:快速排序,插入排序,歸併排序演算法

原理資料:

$arr1 = [2, 3, 4, 1]; //有力說明原理的資料1

$arr1 = [2, 3, 1]; //有力說明原理的資料2

$arr1 = [2, 1]; //有力說明原理的資料3

$arr1 = [1, 2]; //有力說明原理的資料3

#具體案例:

$arr1 = [5, 2, 4, 6, 1, 3];
$arr1 = [2, 3, 4, 1];
$arr1 = [2, 4, 5, 6, 1, 3];
echo “\

歸併排序演算法

原理描述:

對於這樣的一個陣列: $arr1 = [1, 3, 5, 2, 4, 6];將其一分為二:$a = [1 , 3, 5],
$b = [2, 4, 6];

如果有兩個各自已經排好序的數組,則對這兩個數組進行如下操作後,就可以得到一個排好序的這兩個數組的「溶合數組」:

取出數組a的第一項a1,再取出數組b的第一項b1,比較a1和b1的大小,

並將小的(假設為a1)放入一個新數組,並去刪除對應數組a的第一項,

而後再取出對應數組的第一項(不是剛才的那個數據了),而後繼續將兩者對比大小

每次都放入小的到新數組中,並繼續下一次的「刪除,取數,對比」。 。 。 。

這樣之後最終的結果是,新的陣列中就可以得到一個新的排好序的陣列。

對於尚未排好序的數組,只要對其以遞歸方式繼續「一分為二」地分割,最終會得到最短數組-只有一個或0個單元,這種數組自然是排好序的了。

原理圖:

PHP實作陣列排序的方法:快速排序,插入排序,歸併排序演算法

#原理資料:

#$arr1 = [1, 3, 5, 4, 6, 7, 8 ]; //有力說明原理的資料1

從中間一份為2: [ ]; [ 6, 7, 8]

#[ 1, 3, 4, 5, ]

$arr1 = [1, 3, 2, 4]; //有力說明原理的資料2

示範案例:


##

$arr1 = [5, 2, 4, 6, 1, 3];
echo “\

相關建議:


php 冒泡排序 快速排序,php冒泡排序

php 數組排序方法分享(冒泡排序、選擇排序)

以上是PHP實作陣列排序的方法:快速排序,插入排序,歸併排序演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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