php排序笔记-快速排序

快速排序,

1、找一个基准值,

2、然后从右往左找比基准值小的数值,然后停止。从左往右找比基准值大的数值,然后停止。

3、将两个数值交换位置。然后两个哨兵继续移动。

4、直到两个哨兵相遇。再将基准值和相遇时的位置交换,其实这个位置就是基准值应该所在的位置。

5、通过递归再将左半部分和右半部分分别进行快速排序。

 public function  quick_sort(&$arr,$left,$right){

        if($left>$right){
            return ;
        }

        $tmp = $arr[$left];//tmp中存的数就是基准书

        $i=$left;
        $j = $right;

        while($i!=$j){
            //顺序很重要,要先从右往左找,找到比基准书小的数则跳出循环。
            while($arr[$j]>=$tmp && $i<$j){
                $j--;
            }
            //从左往右找比基准数大的数,找到后跳出循环。
            while($arr[$i]<=$tmp && $i<$j){
                $i++;
            }
            //将两个数进行交换。
            if($i<$j){
                $t = $arr[$i];
                $arr[$i]=$arr[$j];
                $arr[$j]=$t;
            }


        }

        //将基准书放到他应该所在的位置。
        $arr[$left]=$arr[$i];
        $arr[$i]=$tmp;

        //递归处理左边区域和右边区域
        $this->quick_sort($arr,$left,$i-1);

        $this->quick_sort($arr,$i+1,$right);


    }

猜你喜欢

转载自www.cnblogs.com/liyante/p/11131417.html
今日推荐