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 }