从来就没有救世主  也不靠神仙皇帝  要创造人类的幸福  全靠我们自己  

快速排序

 

  最坏时间复杂度O(n2),最好和平均是O(n*log2n)

  伪代码:

 1 QuickSort(A,low,high)
 2     if(low<high)
 3         index = Partition(A,low,high)
 4         QuickSort(A,low,index-1)
 5         QuickSort(A,index+1,high)
 6 
 7 Partition(A,low,high)
 8     x = A[high]
 9     i = low-1
10     for j=low to high-1
11         if (A[j]<=x)
12             i++
13             if(i!=j) swap(A,i,j)
14     swap(A,i+1,high)
15     return i+1

 

  如果要改变选取枢纽值,比如随机选取而不是选最后一个数,则现将枢纽值和最后一个值交换,然后开始partition(即在行8前面先交换)

 

  最坏情况:选取的值是最小或最大值

    partition的时间与当前partition元素个数有关系

    T(n)=T(n-1)+0+O(n)=T(n-1)+O(n)

    T(n-1) = T(n-2) + O(n-1)

    ....

    

    所以T(n)=O(n)+O(n-1)+...+O(1)=O(n2)

 

  最好情况:选取的值刚好是最中间的值

    T(n)=2T(n/2) + n

    T(n/2)=2T(n/4) + n/2

    .... 

    

    上面共log2n项,所以

      T(n)=2(2T(n/4)+n/2)+n = 4T(n/4)+2n

          =4(2T(T/8)+n/4)+2n = 8T(n/8)+3n

            =....=2T(n/2x) +xn     当x为log2n

         =nT(1)+nlog2n

    所以最好情况复杂度为O(n*log2n)

posted @ 2020-04-30 18:27  T,X  阅读(217)  评论(0编辑  收藏  举报