數據結構(8) 歸併排序

歸併排序的算法實現:
<?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/>";
	}
?>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章