优点:
1.平均 O(nlogn);
2.原地排序,不需要额外内存(unlike mergeSort);
Tips:
1.每个partition会把pivot放到它最终该待的地方,且每一步找partition仅需要O(n);
2.属于分治思想,对比mergesort快排每次递归没有merge步骤;
3.随机选取pivot是提高算法的一种途径,可证明只要随机产生的pivot能保证将数据分成25%、75%,复杂度即为O(nlogn);
而<QuickSort Therom>说:任取n,随机pivot的平均复杂度为O(nlogn),so,用吧。
#include <iostream>
using namespace std;
void quickSort(int a[], int lhs, int rhs)
{
if(lhs >= rhs)
return;
int flag = a[lhs], i = lhs, j = rhs;
while(i < j)
{
while(a[j] >= flag && i < j)
j--;
while(a[i] <= flag && i < j)
i++;
if(i < j)
swap(a[i], a[j]);
}
swap(a[lhs], a[i]);
quickSort(a, lhs, i - 1);
quickSort(a, i + 1, rhs);
}
int main(void)
{
int a[] = {
2, 9, 6, 5, 4, 10, 8, 7, 3, 1
};
int len = sizeof(a) / sizeof(int);
quickSort(a, 0, len - 1);
for(int i = 0; i < len; ++i)
cout << a[i] << endl;
return 0;
}