归并排序模板复习

今天开始复习模板

归并排序:是建立在归并操作上的一种有效的排序算法,采用的是分治法。核心思想是将两个或两个以上的有序子序列“归并”成一个有序序列。时间复杂度是稳定的O(nlogn)

模板代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int a[10001],b[10001];
 6 int n;
 7 void merge(int a[],int b[],int s,int m,int t){
 8     int i=s,j=m+1,k=s;
 9     while(i<=m && j<=t){
10         b[k++]=a[i]<a[j]?a[i++]:a[j++];
11     }
12     while(i<=m)  b[k++]=a[i++];
13     while(j<=t)  b[k++]=a[j++];
14     for(int l=s;l<=t;l++)  a[l]=b[l];
15 }
16 void devide(int a[],int b[],int s,int t){
17     if(s==t)  return ;
18     else{
19         int m=(s+t)>>1;
20         devide(a,b,s,m);
21         devide(a,b,m+1,t);
22         merge(a,b,s,m,t);
23     }
24 }
25 int main(){
26     scanf("%d",&n);
27     int i;
28     for(i=1;i<=n;i++){
29         scanf("%d",a+i);
30     }
31     devide(a,b,1,n);
32     for(i=1;i<=n;i++){
33         printf("%d ",a[i]);
34     }
35     printf("\n");
36     return 0;
37 }

 

posted @ 2017-05-17 14:22  lazytear  阅读(69)  评论(0编辑  收藏