说到快拍,大家都会首先想到sort函数这个神奇的东西
但是,我们总得知道快拍主要用的分治思想
所以就说一说快拍吧
首先是分类
快拍主要有三种方式:
一、以第一个数为基准排序
二、以中间的数为基准快排
三、随机生成一个位置,用这个位置上的数快排
代码如下:
#include#include #include #include #include using namespace std;int n,a[2000002];/*int rrand(int l,int r) //三中用于生成随机位置{ srand((unsigned)time(NULL)); return (int)(rand()%(r-l+1)+l);}*/void qsort(int l,int r) //以中间的数为基准快排{ int i,j,mid,p; i=l;j=r; mid=a[(l+r)/2]; do { while(a[i] mid) j--; if(i<=j) { p=a[i]; a[i]=a[j]; a[j]=p; i++; j--; } }while(i<=j); if(l temp) { swap(i,j); break; } } } a[i]=temp; qsort(l,i); qsort(i+1,r);}*/ int main(){ freopen("sorttest.in","r",stdin); freopen("sorttest.out","w",stdout); scanf("%d",&n); for(int i=n;i>=1;i--) scanf("%d",&a[i]); /*sort(a+1,a+n+1); //喜闻乐见的sort for(int i=1;i<=n;++i)printf("%d ",a[i]); */ qsort(1,n); for(int i=1;i<=n;++i)printf("%d ",a[i]); fclose(stdout); return 0;}