<?php
//歸併排序
function all_array_merge($arrA,$arrB){
$arrC=array();
$i=$j=$k=0;
$arrA_length=count($arrA);
$arrB_length=count($arrB);
while($i<$arrA_length && $j<$arrB_length){
if($arrA[$i]<$arrB[$j]){
$arrC[]=$arrA[$i++];
}else{
$arrC[]=$arrB[$j++];
}
}
while($i<$arrA_length){
$arrC[]=$arrA[$i++];
}
while($j<$arrB_length){
$arrC[]=$arrB[$j++];
}
return $arrC;
}
function array_merge_sort($array){
$length=count($array);
if($length<=1){
return $array;
}
$mid=intval($length/2);//取數組中間元素的座標
$array_left=array_slice($array,0,$mid);//拆分元素0-mid折部分給左邊$array_left
$array_right=array_slice($array,$mid);//拆分數組mid-$length-1這部分給右邊$array_right
$array_left=array_merge_sort($array_left);//左邊拆分完後開始遞歸合併
$array_right=array_merge_sort($array_right);//右邊拆分完後開始遞歸
$result=all_array_merge($array_left,$array_right);//合併兩個數組,遞歸合併)
return $result;
}
$arr=array(456,35,77,356,33,98,11,44,82);
$res=array_merge_sort($arr);
foreach($res as $key => $value){
echo "key: ".$key." value: ".$value."<br/>";
}
?>
數據結構(8) 歸併排序
歸併排序的算法實現:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.