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 }
MergeSort

 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 }
HeapSort

猜你喜欢

转载自www.cnblogs.com/zhinv/p/9290983.html