快速排序

快速排序基本思想:

1.选择一个基准哨兵元素,通常选择第一个或者最后一个元素(可改进);

2.通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大;

3.此时基准元素放入正确位置;

4.然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序;

时间复杂度: O(nlog2n)-->O(n^2)

空间复杂度:O(nlog2n)

是否稳定排序:不稳定

void quickSort(int *array, int left, int right)
{
    if (left < right)
    {
        int guard = array[left];
        int i = left, j  = right;
        while (i < j)
        {
            while (i < j && array[j] >= guard)//从后向前,找第一个<guard的元素
            {
                --j;
            }
            if (i < j)
            {
                array[i++] = array[j];
            }

            while (i < j && array[i] < guard)//从前向后,找第一个>guard的元素
            {
                ++i;
            }
            if (i < j)
            {
                array[j--] = array[i];
            }
        }
        array[i] = guard;
        quickSort(array, left, i-1);
        quickSort(array, i+1, right);
    }
}

 

posted @ 2016-07-15 13:38  715776681  阅读(150)  评论(0编辑  收藏  举报