php實現歸併排序(二)

之前寫過一個用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";
    }
?>

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