快速排序算法通过多次比较和交换来实现排序,其排序流程如下: [2]
(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。 [2]
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。 [2]
(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 [2]
(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
<?php
#快速排序
$arr = array(25, 25, 133, 452, 364, 5876, 293, 607, 365, 8745, 534, 18, 33);
function quick_sort($arr)
{
#判断是否继续
if (count($arr) <= 1) {
return $arr;
}
//拿出中间值
$middle = $arr[0];
//设置所有两个空数组
$left = [];
$right = [];
for ($i = 1; $i < count($arr); $i++) {
if ($middle <= $arr[$i]) {
//放入右侧数组
$right[] = $arr[$i];
} else {
//放入左侧数组
$left[] = $arr[$i];
}
}
//递归排序两边数组
$left = quick_sort($left);
$right = quick_sort($right);
// 合并排序后的数据,别忘了合并中间值
return array_merge($left, array($middle), $right);
}
echo "<pre>";
var_dump($arr);
var_dump(quick_sort($arr));