C++二路归并排序(非递归)
输入10个数组成的局部有序的数组,对所有数据进行二路归并排序再输出
输入:0 2 4 7 9 1 3 4 5 0
输出:0 0 1 2 3 4 4 5 7 9
错误输出:0123445-1700(DEVC++)
代码如下:
```c++
#include<vector>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
void mergesort(vector<int>&T,int left,int right)
{
int mid=(right-left)/2;
vector<int>L;
vector<int>R;
vector<int>ans;
L.insert(L.begin(),T.begin()+left,T.begin()+left+mid);
R.insert(R.begin(),T.begin()+left+mid+1,T.begin()+right);
vector<int>::iterator i=L.begin();
vector<int>::iterator j=R.begin();
while(i<=L.end()&&j<=R.end())
{
if((*i)<=(*j))
{
ans.push_back((*i));
i++;
}
if((*i)>=(*j))
{
ans.push_back((*j));
j++;
}
}
if(i<=L.end())
{
while(i<=L.end())
{
ans.push_back((*i));
i++;
}
}
else if(j<=R.end())
{
while(j<=R.end())
{
ans.push_back((*j));
j++;
}
}
vector<int>::iterator k=ans.begin();
for(;k<=ans.end();k++)
{
cout<<(*k);
}
}
int main()
{
int i;
vector<int>T;
for(i=0;i<=9;i++)
{
int n;
cin>>n;
T.push_back(n);
}
mergesort(T,0,9);
return 0;
}
```