算法思路:
1.选取基准点,通常为数组的第一个元素
2.获取基准点在数组中的正确位置(让基准点左侧数据小于等于基准点,右侧数据大于等于基准点)
3.对左右两侧的数组分别使用递归进行排序
4.左右两侧的数值交叉找到其合理位置
<?php
function partion(&$arr, $low, $high)
{
$privorKey = $arr[$low];
while ($low < $high) {
while ($low < $high && $arr[$high] >= $privorKey) {
$high --;
}
$arr[$low] = $arr[$high];
while ($low < $high && $arr[$low] <= $privorKey) {
$low ++;
}
$arr[$high] = $arr[$low];
}
$arr[$low] = $privorKey;
return $low;
}
function qSort(&$arr, $low, $high) {
if ($low >= $high) {
return ;
}
$pos = partion($arr, $low, $high);
qSort($arr, $pos + 1, $high);
qSort($arr, $low, $pos - 1);
}
$arr = [1,6,7,99,23,4,1,94,5];
qSort($arr, 0, count($arr) - 1);
print_r($arr);
备注:不需要交换左右数据,是因为基准点的数据已经存在了变量中