快速排序
1.快速排序:
时间复杂度:O(nlogn)
空间复杂度:
2.Php代码如下:
<?php
$arr = [1, 3, 5, 2, 56, 2, 367, 33, 14];
$b = quick($arr);
print_r($b);
function quick($arr)
{
$left = [];
$right = [];
$count = count($arr);
if ($count <= 1) return $arr;
for ($i = 1; $i < $count; $i++) {
if ($arr[$i] > $arr[0]) {
array_push($right, $arr[$i]);
} else {
array_push($left, $arr[$i]);
}
}
$l = quick($left);
$r = quick($right);
return array_merge($l, array($arr[0]), $r);
}
快排分析:
快排可以分成两部分,第一部分: 把数据二分的过程,运算次数是logn, 第二部分是二分得到的每个部分都要循环一次(把大于选择的中间值的数,放右边,反之则放左边),这个时间复杂度是n, 所以时间复杂度是 n*logn, 快排是不稳定的,因为,在二分的时候,每次选择的中间值不确定,最坏的情况也就是每次都选择到那个最小的,这样二分的次数就变成n了,这样总体时间复杂度是: n^2