亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

PHP實(shí)現(xiàn)數(shù)組排序的方法:快速排序,插入排序,歸并排序算法

來源:轉(zhuǎn)載 發(fā)布時(shí)間:2018-12-15 16:05:35 閱讀量:976

php中對于數(shù)組的排序方法是有很多種的,每種數(shù)組排序也都有各自不同的原理,下面就來具體看一下關(guān)于快速排序算法,歸并排序算法以及插入排序算法的示例。

異形數(shù)組的遍歷

求如下數(shù)組中數(shù)字的平均值:

1

2

3

4

5

6

7

8

$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; //計(jì)數(shù)

$sum = GetArraySum($arr1);

echo “\

快速排序算法

原理描述:

對于這樣一個(gè)數(shù)組:[5, 1,2, 6,7];

取出第一項(xiàng)(并作為中間數(shù)組),并將其余項(xiàng)與其對比后,分為兩個(gè)數(shù)組:

左邊數(shù)組項(xiàng)比中間項(xiàng)小,右邊數(shù)組不比中間項(xiàng)小。

如果左邊數(shù)組和右邊數(shù)組已經(jīng)是排好序的數(shù)組,則將這3者合并起來,就是最終結(jié)果。

如果左邊數(shù)組和右邊數(shù)組還不是排好序的數(shù)組,則繼續(xù)遞歸使用本函數(shù)獲取有序數(shù)組。

原理圖:

QQ截圖20180719140656.png

原理性數(shù)據(jù):

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

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

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

$arr1 = [2, 1]; //有力說明原理的數(shù)據(jù)2

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

具體案例:

1

2

3

4

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

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

//$arr1 = [5, 3, 2, 8, 7];

echo “\

插入排序算法

原理描述:

對于這樣一個(gè)數(shù)組:[2, 3, 4, 1];

要將某個(gè)數(shù)n插入到一個(gè)已經(jīng)排好序的數(shù)組中,

只要將n跟這個(gè)數(shù)組的項(xiàng)從后往前一個(gè)一個(gè)對比,只要發(fā)現(xiàn)某項(xiàng)比n大,

就將該項(xiàng)后移一位,然后繼續(xù)往前取出并對比,比n大就往后移動(dòng)一位,以此類推。

最后沒有比n大的時(shí)候,就把n放入到剛才往后移動(dòng)時(shí)空出來的那個(gè)位置上。

對于一個(gè)數(shù)組,第1項(xiàng)就可以當(dāng)做一個(gè)“已經(jīng)排好序”的數(shù)組,

則第2項(xiàng)就可以遵照上述原理來進(jìn)行“插入排序”,于是前兩個(gè)就可以排好,

并成為了具有兩個(gè)元素的“排好序的數(shù)組”。后續(xù)以此類推。

原理圖:

QQ截圖20180719140722.png

原理數(shù)據(jù):

$arr1 = [2, 3, 4, 1]; //有力說明原理的數(shù)據(jù)1

$arr1 = [2, 3, 1]; //有力說明原理的數(shù)據(jù)2

$arr1 = [2, 1]; //有力說明原理的數(shù)據(jù)3

$arr1 = [1, 2]; //有力說明原理的數(shù)據(jù)3

具體案例:

1

2

3

4

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

$arr1 = [2, 3, 4, 1];

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

echo “\

歸并排序算法

原理描述:

對于這樣的一個(gè)數(shù)組: $arr1 = [1, 3, 5, 2, 4, 6];將其一分為二:$a = [1, 3, 5], 
$b = [2, 4, 6];

如果有兩個(gè)各自已經(jīng)排好序的數(shù)組,則對這兩個(gè)數(shù)組進(jìn)行如下操作后,就可以獲得一個(gè)排好序的這兩個(gè)數(shù)組的“溶合數(shù)組”:

取出數(shù)組a的第一項(xiàng)a1,再取出數(shù)組b的第一項(xiàng)b1,比較a1和b1的大小,

并將小的(假設(shè)為a1)放入一個(gè)新數(shù)組,并去刪除對應(yīng)數(shù)組a的第一項(xiàng),

而后再取出對應(yīng)數(shù)組的第一項(xiàng)(不是剛才的那個(gè)數(shù)據(jù)了),而后繼續(xù)將兩者對比大小

每次都放入小的到新數(shù)組中,并繼續(xù)下一次的“刪除,取數(shù),對比”。。。。

這樣之后最終的結(jié)果是,新的數(shù)組中就可以得到一個(gè)新的排好序的數(shù)組。

對于尚未排好序的數(shù)組,只要對其以遞歸方式繼續(xù)“一分為二”地分割,最終會(huì)得到最短數(shù)組——只有一個(gè)或0個(gè)單元,這種數(shù)組自然是排好序的了。

原理圖:

QQ截圖20180719140740.png

原理數(shù)據(jù):

$arr1 = [1, 3, 5, 4, 6, 7, 8 ]; //有力說明原理的數(shù)據(jù)1

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

[ 1, 3, 4, 5, ]

$arr1 = [1, 3, 2, 4]; //有力說明原理的數(shù)據(jù)2

演示案例:


1

2

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

echo “\


標(biāo)簽: PHP
分享:
評論:
你還沒有登錄,請先