概念:归并排序(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;
}