快速排序
Posted taoxiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。
最坏时间复杂度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
=....=2x T(n/2x) +xn 当x为log2n
=nT(1)+nlog2n
所以最好情况复杂度为O(n*log2n)
以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章