??归并排序-顾名思义通过递归
和合并
的方式排序无序数列。归并排序是基于一种被称为“分治”(divide and conquer)的策略。
归并排序先分解无序数列到每一个无效数列为一个元素时候,该无序数列就是有序数列,然后一步步回退合并每一个有序数列
http://blog.csdn.net/morewindows/article/details/6678165
http://bubkoo.com/2014/01/15/sort-algorithm/merge-sort/
http://flyingcat2013.blog.51cto.com/7061638/1281026
//将有二个有序数列$arr1,$arr2合并。
function mergeArray($arr1,$arr2){
$i=0;
$j=0;
$arr1_length = count($arr1);
$arr2_length = count($arr2);
$temp =array();
while($i < $arr1_length && $j < $arr2_length){
if($arr1[$i] < $arr2[$j]){
$temp[] = $arr1[$i++];
}else{
$temp[] = $arr2[$j++];
}
}
while($i<$arr1_length){
$temp[] = $arr1[$i++];
}
while($j<$arr2_length){
$temp[] = $arr2[$j++];
}
return $temp;
}
//递归分解任务
function mergeSort($arr,$last,$first=0){
if($first < $last){
$mid = (int)(($first+$last)/2);
$arr_left = mergeSort($arr,$mid,$first);
$arr_right = mergeSort($arr,$last,$mid+1);
return mergeArray($arr_left,$arr_right);
}
return array($arr[$first]);
}
$item =array(‘2‘,‘1‘,‘4‘,‘3‘,‘8‘,‘6‘,‘5‘,‘-1‘,‘10‘,‘3‘,‘7‘,‘6‘,‘6‘);
var_dump(implode(‘,‘,$item));
var_dump(implode(‘,‘,mergeSort($item,count($item)-1)));
原文地址:http://blog.csdn.net/pursuing0my0dream/article/details/45845721