#include<iostream>
#include<vector>
using namespace std;
void Merge(vector<int>& array, int l, int r, int mid, vector<int>& result);
void MergeSort(vector<int>& array, int l, int r,vector<int>& result);
int main()
{
int i,j,a;
vector<int>array;
vector<int>result;
while(scanf("%d",&a)) //按ctrl+z结束输入
{
array.push_back(a);
result.push_back(0);
}
MergeSort(array,0,array.size()-1,result);
for(i=0;i<result.size();i++)
{
if(i<result.size()-1)
cout<<result[i]<<" ";
else
cout<<result[i]<<endl;
}
return 0;
}
void Merge(vector<int>& array, int l, int r, int mid, vector<int>& result)
{
int i=l,j=mid+1,k;
for(k=l;(i<=mid)&&(j<=r);k++)
{
if(array[i]<array[j])
{
result[k]=array[i];
i++;
}
else
{
result[k]=array[j];
j++;
}
}
while(i<=mid)
result[k++]=array[i++];
while(j<=r)
result[k++]=array[j++];
}
void MergeSort(vector<int>& array, int l, int r,vector<int>&result)
{
int temp;
int mid=(l+r)/2;
if(l==r) //只有一个元素
{
result[l]=array[l];
return;
}
else if(l+1==r) //如果区间中只有两个元素,则对这两个元素进行排序
{
if(array[l]>array[r])
{
temp=array[l];
array[l]=array[r];
array[r]=temp;
}
return;
}
else
{
MergeSort(array,l,mid,result);
MergeSort(array,mid+1,r,result);
Merge(array,l,r,mid,result);
for(int i=l;i<=r;i++)
array[i]=result[i]; //将排序后的数据复制回原始数据中去,这步非常重要
}
}
好长时间没写算法题了,今天一个归并排序竟然没跑出来,忘记写回原数组了,在这里记一下,大家千万也要注意这一点,否则都不知道哪里有问题。