<?php
//注意这里的参数 $arr 使用的地址传递
function quickSort(&$arr, $low, $high)
{
//当起始位置不小于终止位置时停止递归
if ($low > $high) {
return;
}
$first = $low;
$last = $high;
//设置枢轴
$key = $arr[$first];
//遍历交换
while ($first < $last) {
//从后边往前移动终止位置
while ($first < $last && $arr[$last] >= $key) {
--$last;
}
//当终止位置移动到起始位置或者移动到的位置的数据比枢轴位置的数据小时,将移动到的位置的数据交换到枢轴位置
$arr[$first] = $arr[$last];
//然后从前往后移动起始位置
while ($first < $last && $arr[$first] <= $key) {
++$first;
}
//当起始位置移动到当前的终止位置或移动到的位置的数据比枢轴数据大时,将移动到的位置的数据交换到当前的终止位置
$arr[$last] = $arr[$first];
}
//将原枢轴位置的值放到移动后的起始位置
$arr[$first] = $key;
//继续排序当前起始位置左边的数据
quickSort($arr, $low, $first - 1);
//继续排序当前起始位置右边的数据
quickSort($arr, $first + 1, $high);
}
$arr = [54, 32, 34, 87, 45, 65, 43];
foreach ($arr as $value) {
echo $value . "\t";
}
echo "\n";
quickSort($arr, 0, count($arr) - 1);
foreach ($arr as $value) {
echo $value . "\t";
}
最佳情况: T(n) =O(nlog2n) 。
最差情况: T(n) =O(n2) 。
平均情况: T(n) =O(nlogn) 。
原文:https://www.cnblogs.com/FirstLine/p/14691213.html