之前寫過一個用php實現歸併排序,但是那個裏面有使用php的API,於是決定重新寫一個,不用PHP api的歸併排序。
寫了一早晨,寫出來了又覺得沒啥意思了,哎,實現不了堆排序,一切都等於是白說啊。
<?php
for($i=0;$i<500;$i++)
$arr[$i]=rand(0,10000);
printArr($arr);
echo "<hr>";
function merge_sort(&$arr,$start,$end){
//$start<$end $start<$end $start<$end 重要的事情說三遍
if($start<$end){
$middle=intval(($end+$start)/2); //取得中間值,下面就是對數組進行分割
merge_sort($arr,$start,$middle);
merge_sort($arr,$middle+1,$end);
merge($arr,$start,$middle,$end); //將數組的值進行合併
}
}
function merge(&$arr,$start,$middle,$end){
$j=$middle+1;
$k=$start;
$i=$start;
$arr_=array();
while($i<=$middle && $j<=$end){ //兩個數組分別進行合併
if($arr[$i]<$arr[$j]){
$arr_[$k]=$arr[$i];
$i++;
}else{
$arr_[$k]=$arr[$j];
$j++;
}
$k++;
}
//只合並剩下的那一個
while($i<=$middle){
$arr_[$k]=$arr[$i];
$i++;
$k++;
}
while($j<=$end){
$arr_[$k]=$arr[$j];
$j++;
$k++;
}
for($i=$start;$i<=$end;$i++)
$arr[$i]=$arr_[$i];
}
merge_sort($arr,0,count($arr)-1);
printArr($arr);
function printArr($arr){
for($i=0;$i<count($arr);$i++)
echo ' '.$arr[$i];
echo "\n";
}
?>