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";
    }
?>


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