快速排序(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);
}