敲了很久- -,最后debug时发现是循环变量少计算了一位。结果就变得难看了。
快速排序的一般性能是O(nlogn),最差是O(n^2).避免最差情况是采用随机化快排;“随机化快排可以满足一个人一辈子的人品需求”。
http://v.163.com/movie/2010/12/S/4/M6UTT5U0I_M6V2T7IS4.html
这个MIT关于本节的公开课,值得一看。
按照算法写了下c程序:
#include<iostream> using namespace std; void exchange(int *a,int *b) { int temp = 0; temp = *a; *a = *b; *b = temp; } int PARTITION(int a[],int p,int r) { int i,j,x; x=a[r]; i=p-1; for(j=p;j<r;j++) { if(a[j]<=x) { i++; exchange(&a[i],&a[j]); } } exchange(&a[i+1],&a[r]); return i+1; } void QUICKSORT(int a[],int p,int r) { int q; if(p>=r) return; q=PARTITION(a,p,r); QUICKSORT(a,p,q-1); QUICKSORT(a,q+1,r); } int main() { int a[100]; int i,n,ff; cin>>n; for(i=0;i<n;i++) cin>>a[i]; QUICKSORT(a,0,n-1); for(i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; return 0; }