快速排序步骤
- 取数组中间值
- 遍历数组剩余元素小于中间值的放左边,大于中间值的放右边
- 将左右循环如此直至不可再分
- 将已排好的合并
第一种处理方式:
<?php
function quick_sort($arr)
{
if (count($arr) <= 1){
return $arr;
}
// 取数组中间索引
$index = (int)floor(count($arr) / 2);
$value = $arr[$index];
// 移除中间元素
array_splice($arr, $index, 1);
// 初始化左右数组
$a_left = $a_right = [];
for ($i = 0; $i < count($arr); $i++) {
if ($arr[$i] < $value) {
array_push($a_left, $arr[$i]);
} else {
array_push($a_right, $arr[$i]);
}
}
$a_left = quick_sort($a_left);
$a_right = quick_sort($a_right);
array_push($a_left, $value);
// 合并左右数组
return array_merge($a_left, $a_right);
}
$arr=[2,6,3,9];
var_dump(quick_sort($arr));
算法中所用到的PHP内置函数参考
floor
floor — 舍去法取整
floor ( float
$value) : float返回不大于
value的最接近的整数,舍去小数部分取整。
array_splice
array_splice — 去掉数组中的某一部分并用其它值取代
array_splice ( array
&$input, int$offset[, int$length= count($input) [, mixed$replacement= array() ]] ) : array把
input数组中由offset和length指定的单元去掉,如果提供了replacement参数,则用其中的单元取代。
array_push
array_push — 将一个或多个单元压入数组的末尾(入栈)
array_push ( array
&$array, mixed$value1[, mixed$...] ) : intarray_push() 将
array当成一个栈,并将传入的变量压入array的末尾。array的长度将根据入栈变量的数目增加。
array_merge
array_merge — 合并一个或多个数组
array_merge ( array
$array1[, array$...] ) : arrayarray_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

18万+

被折叠的 条评论
为什么被折叠?



