php實現快速排序

php實現快速排序

快速排序:這個算法是參考百度百科的C語言的代碼,沒有參考php的代碼,因爲php的代碼雖然思路簡單,但是中間需要開好得多數組,太過於耗內存。

先獲取第一個值爲關鍵字,讓i指向第一個,j指向最後一個,先從最後一個找比key小的,j指向它,將它放在i指向的地方,然後i再向前走,直到找到比key大的,放在j指向的地方,就這樣循環,直到i=j的時候,關閉循環。

<?php
    $arr=array(1,2,3,5,2,3,9,8,3,2,7,4,9,8,0,4,587,93,47,59,8,2,6,83,4,9,65,2,18,7);
    printArr($arr);
    function quick(&$arr,$left,$right){
        if($left<$right){    //設置遞歸在這裏停下來
            $key=$arr[$left];    //獲取關鍵值
            $i=$left;        //左指針
            $j=$right;        //右指針
            while($i<$j){
                while($j>$i && $key<=$arr[$j])
                    $j--;
                $arr[$i]=$arr[$j];
                while($i<$j && $key>=$arr[$i])
                    $i++;
                $arr[$j]=$arr[$i];
            }
            $arr[$j]=$key;    //關鍵的就是這裏,這個必須要把最後的值給$i爲下標的數組值
            quick($arr,$left,$j);
            quick($arr,$j+1,$right);
        }
    }
    quick($arr,0,count($arr)-1);
    printArr($arr);
    function printArr($arr){
        for($i=0;$i<count($arr);$i++)
            echo ' '.$arr[$i];
        echo "\n";
    }
?>


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