版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/phpbook/article/details/53232467
概念:歸併排序(MERGE-SORT)是建立在歸併操作上的一種有效的排序算法,該算法是採用分治法(Divide and Conquer)的一個非常典型的應用。將已有序的子序列合併,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。
代碼演示
個人版本
$arr1 = array(2,5,7,8,11,15);
$arr2 = array(1,6,9,10,13,14,15);
function merge_sort($arr1,$arr2){
$len1 = count($arr1);
$len2 = count($arr2);
$key2 = $key1 = 0;
$array = array();
$status = false;
while ($status == false) {
if($key1<$len1 && $key2<$len2){
$array[] = min($arr1[$key1],$arr2[$key2]);
if($arr1[$key1]>$arr2[$key2]){
$key2++;
}else{
$key1++;
}
}else{
$status = true;
if($arr1[$key1]){
$array[] = $arr1[$key1];
}else{
$array[] = $arr2[$key2];
}
}
}
return $array;
}
echo "<pre>";
print_r(merge_sort($arr1,$arr2));
echo "</pre>";
網上參考
/**
* 將兩個有序數組合併成一個有序數組
* @param $arrA,
* @param $arrB,
* @reutrn array合併好的數組
*/
function mergeArray($arrA, $arrB) {
$a_i = $b_i = 0;//設置兩個起始位置標記
$a_len = count($arrA);
$b_len = count($arrB);
while($a_i<$a_len && $b_i<$b_len) {
//當數組A和數組B都沒有越界時
if($arrA[$a_i] < $arrB[$b_i]) {
$arrC[] = $arrA[$a_i++];
} else {
$arrC[] = $arrB[$b_i++];
}
}
//判斷 數組A內的元素是否都用完了,沒有的話將其全部插入到C數組內:
while($a_i < $a_len) {
$arrC[] = $arrA[$a_i++];
}
//判斷 數組B內的元素是否都用完了,沒有的話將其全部插入到C數組內:
while($b_i < $b_len) {
$arrC[] = $arrB[$b_i++];
}
return $arrC;
}