TEMPLATES
Posted zhinv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TEMPLATES相关的知识,希望对你有一定的参考价值。
1.快速排序
1 #include <cstdio> 2 const int MAXN=1e5+1; 3 int a[MAXN]; 4 inline int read() 5 { 6 int f=1,x=0;char c=getchar(); 7 while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();} 8 while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();} 9 return f*x; 10 } 11 void qSort(int a[],int l,int r) 12 { 13 if(l==r)return; 14 int m=a[(l+r)>>1],i=l,j=r; 15 do{ 16 while(a[i]<m)i++; 17 while(a[j]>m)j--; 18 if(i<=j) 19 { 20 int t=a[i];a[i]=a[j];a[j]=t; 21 i++;j--; 22 } 23 }while(i<=j); 24 if(i<r)qSort(a,i,r); 25 if(j>l)qSort(a,l,j); 26 } 27 int main() 28 { 29 int n=read(); 30 for(int i=1;i<=n;i++)a[i]=read(); 31 qSort(a,1,n); 32 for(int i=1;i<=n;i++)printf("%d ",a[i]); 33 return 0; 34 }
2.归并排序
1 #include <cstdio> 2 const int MAXN=1e5+1; 3 int a[MAXN],T[MAXN]; 4 inline int read() 5 { 6 int f=1,x=0;char c=getchar(); 7 while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();} 8 while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();} 9 return f*x; 10 } 11 void MergeSort(int a[],int l,int r) 12 { 13 if(l==r)return; 14 int m=(r-l)/2+l; 15 MergeSort(a,l,m); 16 MergeSort(a,m+1,r); 17 int p=l,q=m+1,it=l; 18 while(p<=m || q<=r) 19 { 20 if(q>r || (p<=m && a[p]<=a[q]) )T[it++]=a[p++]; 21 else T[it++]=a[q++]; 22 } 23 for(int i=l;i<=r;i++)a[i]=T[i]; 24 } 25 int main() 26 { 27 int n=read(); 28 for(int i=1;i<=n;i++)a[i]=read(); 29 MergeSort(a,1,n); 30 for(int i=1;i<=n;i++) 31 { 32 printf("%d",a[i]); 33 if(i!=n)printf(" "); 34 } 35 return 0; 36 }
3.堆排序
1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 5 const int MAXN=1e5+1; 6 int a[MAXN]; 7 8 inline int read() 9 { 10 int f=1,x=0;char c=getchar(); 11 while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();} 12 while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();} 13 return f*x; 14 } 15 16 void insert(int a[],int size,int val) 17 { 18 int pos=size; 19 a[pos]=val; 20 while((pos>>1)>0) 21 { 22 if(a[pos]>a[pos>>1]) 23 { 24 swap(a[pos],a[pos>>1]); 25 pos >>= 1; 26 } 27 else break; 28 } 29 } 30 void down(int a[],int pos,int size) 31 { 32 if(pos>=size || (pos<<1) >size)return; 33 int lc=pos<<1,rc=pos<<1|1; 34 int d; 35 if(rc<=size)d=a[lc]>=a[rc]?lc:rc; 36 else d=lc; 37 if(a[d] > a[pos]) 38 { 39 swap(a[d],a[pos]); 40 down(a,d,size); 41 } 42 } 43 44 void heapSort(int a[],int size) 45 { 46 while(size>=2) 47 { 48 swap(a[1],a[size]); 49 size--; 50 down(a,1,size); 51 } 52 } 53 54 int main() 55 { 56 int n=read(); 57 for(int i=1;i<=n;i++) 58 { 59 int x=read(); 60 insert(a,i,x); 61 } 62 heapSort(a,n); 63 for(int i=1;i<=n;i++)printf("%d ",a[i]); 64 return 0; 65 }
以上是关于TEMPLATES的主要内容,如果未能解决你的问题,请参考以下文章