#include<iostream>
#include<vector>
#include<fstream>
#include<sstream>
using namespace std;
//读入文件
void inputFile(vector<int>& vec)
{
int number;
string inputfile;
cin>>inputfile;
ifstream in(inputfile.c_str());
for(string line; getline(in, line); )
{
istringstream sin(line);
for(; sin>>number; )
{
vec.push_back(number);
}
}
}
//合并程序
void merge(vector<int>& vec, int p, int r, int q)
{
int n1, n2, k, i, j;
n1 = r - p + 1;
n2 = q - r;
vector<int> vec1(n1+2), vec2(n2+2);
for(i=1; i <= n1; i++)
{
vec1[i] = vec[p+i-1];
}
for(j=1; j <= n2; j++)
{
vec2[j] = vec[r+j];
}
//这个是作为哨兵
vec1[n1+1] = 1<<30;
vec2[n2+1] = 1<<30;
i = 1;
j = 1;
for(k=p; k <= q; k++)
{
if(vec1[i] < vec2[j])
{
vec[k] = vec1[i];
i++;
}
else
{
vec[k] = vec2[j];
j++;
}
}
}
//合并排序算法
void mergeSort(vector<int>& vec, int p, int q)
{
if(p < q)
{
int r = (p + q) / 2;
mergeSort(vec, p, r);
mergeSort(vec, r+1, q);
merge(vec, p, r, q);
}
}
//输出排序后的内容
void outputFile(vector<int>& vec)
{
ofstream out("outputfile.txt");
for(int i=1; i <= vec.size() - 1; i++)
{
out<<vec[i]<<" ";
}
}
int main()
{
vector<int> vec;
vec.push_back(-1);
inputFile(vec);
mergeSort(vec, 1, vec.size()-1);
outputFile(vec);
return 1;
}