根据算法导论写的快速排序
算法导论上面说在选取基准元素是取得最后一个,我用的数据结构课本上面是取第一个;
不过没有原理都是一样的;通过Qartion(int a[],int l,int r)函数将数组a中元素划分为三部分,比a[r]小的,比a[r]大的,a[r];
最后返回基准元素所在的位置;
#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>#include <math.h>using namespace std; const int N=99; int Qartion(int a[],int l,int r) { int tmp=a[r]; int i=l-1; for(int j=l;j<=r-1;j++) { if(a[j]<=tmp){ i++; swap(a[i],a[j]);} } swap(a[i+1],a[r]); return i+1; } void Qsort(int a[],int l,int r) { if(l<r) { int p=Qartion(a,l,r);Qsort(a,l,p-1);Qsort(a,p+1,r); } } int main() { int n; while(~scanf("%d",&n)) { int a[100]; for(int i=0;i<n;i++) { cin>>a[i]; } Qsort(a,0,n-1); for(int i=0;i<n;i++) { cout<<a[i]<<" "; } cout<<endl; } return 0; }