标签:ref -- org strong 一半 class 锻炼 交换 ret
真正意义上学会快排,以前一直调的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; }
标签:ref -- org strong 一半 class 锻炼 交换 ret
原文地址:https://www.cnblogs.com/qseer/p/9419862.html