快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
/**
[quick_sort 快速排序]
@Author Jerry
@DateTime 2018-06-06T14:03:18+0800
@Example eg:
@param [type] $source [description]
@param string $order [description]
@return [type] [description]
取数组中间值=>遍历数组剩余元素=>小于中间值的放左边,大于中间值的放右边=>将左右循环如此直至不可再分->将已排好的合并
*/
function quick_sort($source, $order = ’desc’)
{
$length = count($source);
//是否需要继续
if ($length <= 1) {
return $source;
}
$left = [];
$center = $source[0];
$right = [];
//0被定义为中间值
for ($i = 1; $i < $length; $i++) {
$condition = $order == < spanclass = "hljs-string" > 'desc' < / span > ? ($source[$i] & gt; $center) : ($source[$i] & lt; $center);
< spanclass = "hljs-keyword" > if < / span > ($condition) {
$left[] = $source[$i];
}
< spanclass = "hljs-keyword" > else{
< / span > {
$right[] = $source[$i];
}
}
//递规一直处理
$left = quick_sort($left, $order);
}
$right = quick_sort($right, $order);
//合并数据
return array_merge($left, [$center], $right);
}