快速排序

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

posted @ 2016-11-27 21:18  Thomas_188  阅读(132)  评论(0编辑  收藏  举报