1 #include<iostream>
2 using namespace std;
3 int pt[1000001];
4 int pr[1000001];
5 void mergesort(int*,int*,int,int);
6 int main() //归并排序
7 {
8 int num,i=0,j,left,right;
9
10 while(cin>>num)
11 {
12 pt[i++]=num;
13 if(cin.get()=='\n') break;
14 }
15 left=0;
16 right=i-1;
17
18 for(i=left;i<=right;i++)
19 pr[i]=pt[i];
20
21 mergesort(pt,pr,left,right);
22 for(j=0;j<=right;j++)
23 cout<<pt[j]<<" ";
24
25 }
26
27 void mergesort(int*pt,int*pr,int left,int right)
28 {
29 int mid=(left+right)/2;
30 if(left==right) return;
31 mergesort(pt,pr,left,mid);
32 mergesort(pt,pr,mid+1,right);
33
34 int i1=left;int i2=mid+1;
35
36 for(int curr=left;curr<=right;curr++)
37 {
38 if(i1==mid+1)
39 pt[curr]=pr[i2++];
40 else if(i2>right)
41 pt[curr]=pr[i1++];
42 else if(pr[i1]<pr[i2])
43 pt[curr]=pr[i1++];
44 else
45 pt[curr]=pr[i2++];
46
47 }
48
49
50 }