归并排序模板
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 const int maxn=100005; 5 int n; 6 int a[maxn]; 7 void merge(int L,int M,int R) 8 { 9 const int Sizeof_Left=M-L+1; 10 const int Sizeof_Right=R-M; 11 int left[Sizeof_Left]; 12 int right[Sizeof_Right]; 13 for(int i=L;i<=M;i++) 14 left[i-L]=a[i]; 15 for(int i=M+1;i<=R;i++) 16 right[i-M-1]=a[i]; 17 18 int i=0; 19 int j=0; 20 int k=L; 21 while(i < Sizeof_Left&&j < Sizeof_Right) 22 { 23 if(left[i] < right[j]) 24 { 25 a[k]=left[i]; 26 i++,k++; 27 } 28 else 29 { 30 a[k]=right[j]; 31 j++; 32 k++; 33 } 34 } 35 while(i < Sizeof_Left) a[k++]=left[i++]; 36 while(j < Sizeof_Right) a[k++]=right[j++]; 37 } 38 void mergesort(int L,int R) 39 { 40 if(L == R) return; 41 42 int M=(L+R)>>1; 43 mergesort(L,M); 44 mergesort(M+1,R); 45 merge(L,M,R); 46 } 47 int main() 48 { 49 printf("n="); 50 cin>>n; 51 printf("array[]="); 52 for(int i=0;i<n;i++) 53 scanf("%d",&a[i]); 54 mergesort(0,n-1); 55 printf("solution:\n"); 56 for(int i=0;i<n;i++) 57 printf("%d ",a[i]); 58 printf("\n"); 59 return 0; 60 }
1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<algorithm> 5 #include<cmath> 6 #include<vector> 7 #include<queue> 8 #define ms(x,n) memset(x,n,sizeof x); 9 #include<bits/stdc++.h> 10 const int maxn=1005; 11 const int inf=0x3f3f3f3f; 12 int a[maxn];//待排序列,临时数组 13 int n,m,tmp,num; 14 using namespace std; 15 void merges(int a[],int b[],int l,int r,int rightend) 16 { 17 //左起始位置,右起始位置,右终点位置 18 int leftend=r-1; 19 tmp=l;//存放结果的数组的初始位置 20 num=rightend-l+1;//此次归并的元素总个数 21 while(l<=leftend&&r<=rightend) 22 { 23 if(a[l]<=a[r]) 24 b[tmp++]=a[l++]; 25 else 26 b[tmp++]=a[r++]; 27 } 28 while(l<=leftend) 29 b[tmp++]=a[l++]; 30 while(r<=rightend) 31 b[tmp++]=a[r++]; 32 for(int i=0;i<num;i++,rightend--) 33 a[rightend]=b[rightend]; 34 } 35 void msort(int a[],int b[],int l,int rightend) 36 { 37 int mid;//=(l+rightend)>>1; 38 if(l<rightend) 39 { 40 mid=(l+rightend)>>1; 41 msort(a,b,l,mid); 42 msort(a,b,mid+1,rightend); 43 merges(a,b,l,mid+1,rightend); 44 } 45 } 46 void Merge_sort(int a[],int n)//函数统一的接口 47 { 48 //int *b; 49 //b=malloc(n*sizeof(int)); 50 int *b=new int[n]; 51 msort(a,b,0,n-1); 52 free(b); 53 } 54 int main() 55 { 56 cin>>n; 57 for(int i=0;i<n;i++) 58 cin>>a[i]; 59 Merge_sort(a,n); 60 for(int i=0;i<n;i++) 61 cout<<a[i]<<" "; 62 return 0; 63 }