归并排序模板复习
今天开始复习模板
归并排序:是建立在归并操作上的一种有效的排序算法,采用的是分治法。核心思想是将两个或两个以上的有序子序列“归并”成一个有序序列。时间复杂度是稳定的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 }