php 实现快速排序算法:
第一种:
1. 选取第一个元素为基数,分别从右(high)往左(high--)查找,找到一个比基数小的数,进行位置交换, 直到 low == high,结束一次排序;然后从 左 往右查找,找到一个比基数大的数,进行位置交换,直到 low == high,结束一次排序;最后将基数 放到 low 位置上。
2. 此时的 low 值代表一次排序后 基数所在的数组下标位置。
3. 通过递归进行 左右子数组排序,直到 low == high
代码如下:
$arr = [49,38,65,97,76,13,27,49];
function partition(&$arr, $low, $high)
{
//$low = 0;
//$high = count($arr) - 1;
$base = $arr[$low];
while($high > $low) {
while($low < $high && $arr[$high] >= $base)
{
$high--;
}
$arr[$low] = $arr[$high];
while($low < $high && $arr[$low] <= $base)
{
$low++;
}
$arr[$high] = $arr[$low];
}
$arr[$low] = $base;
return $low;
}
function quickSort(&$arr, $low, $high)
{
if ($high >