模板快速排序(luogu 1177)
Posted qseer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板快速排序(luogu 1177)相关的知识,希望对你有一定的参考价值。
真正意义上学会快排,以前一直调的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)的主要内容,如果未能解决你的问题,请参考以下文章