快速排序
大约 1 分钟
快速排序
快速排序(Quick Sort)
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小, 则可分别对这两部分记录继续进行排序,以达到整个序列有序。
算法描述
快速排序使用分治法来把一个串分为两个子串。具体算法描述如下:
动图演示
- 从数列中挑出一个元素,称为“基准”;
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面。 在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作;
- 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
代码实现
$numbers = [20, 40, 60, 80, 30, 70, 90, 10, 50, 0, 5];
function quickSort(&$arr, $start, $end)
{
if ($start > $end) {
return;
}
$key = $arr[$start];
$left = $start;
$right = $end;
while ($left < $right) {
while ($left < $right && $arr[$right] >= $key) {
$right--;
}
while ($left < $right && $arr[$left] <= $key) {
$left++;
}
if ($left < $right) {
$tmp = $arr[$left];
$arr[$left] = $arr[$right];
$arr[$right] = $tmp;
}
}
$arr[$start] = $arr[$left];
$arr[$left] = $key;
quickSort($arr, $start, $right - 1);
quickSort($arr, $right + 1, $end);
}
quickSort($numbers, 0, 10);
var_dump($numbers);