來源:轉(zhuǎn)載 發(fā)布時(shí)間:2018-12-15 16:05:35 閱讀量:976
php中對于數(shù)組的排序方法是有很多種的,每種數(shù)組排序也都有各自不同的原理,下面就來具體看一下關(guān)于快速排序算法,歸并排序算法以及插入排序算法的示例。
求如下數(shù)組中數(shù)字的平均值:
1 2 3 4 5 6 7 8 |
|
原理描述:
對于這樣一個(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ù)組。
原理圖:
原理性數(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 |
|
原理描述:
對于這樣一個(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ù)以此類推。
原理圖:
原理數(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 |
|
原理描述:
對于這樣的一個(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ù)組自然是排好序的了。
原理圖:
原理數(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 |
|