之前写过一个用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";
}
?>