快速排序,
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); }
原文:https://www.cnblogs.com/liyante/p/11131417.html