快速排序(C++实现)

2017-10-15  本文已影响0人  曲谐_

快速排序步骤:

代码实现:

#include<iostream>
using namespace std;
void Quicksort(int a[],int left,int right)
{
    if(left < right)
    {
        int x = a[left];
        int i = left;
        int j = right;
        while(i < j)
        {
            while(i < j && a[j] > x)
                j--;
            if(i < j)
                a[i++] = a[j];
            while(i < j && a[i] < x)
                i++;
            if(i < j)
                a[j--] = a[i];
        }
        a[i] = x;
        Quicksort(a,left,i-1);
        Quicksort(a,i+1,right);
    }
}
int main()
{
    int a[9] = {4,1,2,5,3,6,7,9,8};
    int len = sizeof(a)/sizeof(int);
    Quicksort(a,0,len-1);
    for(int i=0;i<len;i++)
        cout << a[i] << " ";
    return 0;
}

时间复杂度

理论上分析一下:
最坏情况:假设每一次最左边需要比较的元素在j--的过程中,一直都没有遇到比它小的元素,那么总共比较n-1次,第二轮则要n-2次,以此类推。。。(n-1)+(n-2)+...+1=1/2n^2。 时间复杂度为O(n^2)。
最好情况:每次五五分,那么就类似二分查找一般的“二分排序”,总共递归次数只需要二叉树的深度logn,每次递归比较n次。时间复杂度为O(nlogn)。
平均情况:O(nlogn)。证明过程略,太复杂记住即可。

上一篇下一篇

猜你喜欢

热点阅读