【模板】快速排序(luogu 1177)
阿新 • • 發佈:2018-08-04
i++ 中間 print 傳送門 http pac https tps nbsp
測評傳送門
真正意義上學會快排,以前一直調的sort…… 但畢竟能手寫就手寫,對自己也是一種鍛煉
解析:
快排說白了就是把要排的一行數切成一半,記錄下中間值,在左半部分找到比中間值大的(記d1),再在右半部分找到比中間值小的(記d2)
如果d1在d2的左邊,就交換他們,d1後推一格,d2前推一格,繼續快排
#include<stdio.h> using namespace std; int a[100001]; void fast(int l,int r) { int i,j,mid,p; i=l,j=r; mid=a[(l+r)>>1];do { while(a[i]<mid) i++; while(a[j]>mid) j--; if(i<=j) { p=a[i]; a[i]=a[j]; a[j]=p; i++,j--; } }while(i<=j); if(l<j) fast(l,j); if(i<r) fast(i,r); } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;++i){ scanf("%d",&a[i]); } fast(1,n); for(int i=1;i<=n;++i){ printf("%d ",a[i]); } return 0; }
【模板】快速排序(luogu 1177)