#include <cstdlib>
#include <iostream>
#include <vector>
#define INFINITE 1000 //设立监视哨
using namespace std;
void input(vector<int>& v) //输入数据
{
cout<<"please enter the number(<1000):"<<endl;
int data;
while(cin>>data)
v.push_back(data);
}
void merge(vector<int> &v,int p,int q,int r)
{
vector<int>v1,v2;
int m=0;
int n=0;
for(int i=p; i<=q; i++)
v1.push_back(v.at(i));
v1.push_back(INFINITE);
for(int i=q+1; i<=r; i++)
v2.push_back(v.at(i));
v2.push_back(INFINITE);
for(int i=p; i<=r; i++) //只需要操作r-p+1次
{
if(v1[m]<=v2[n])
{
v[i]=v1[m];
m++;
}
else
{
v[i]=v2[n];
n++;
}
}
}
void mergeSort(vector<int>& v, int p, int r)
{
if(p<r)
{
int q=(p+r)/2;
mergeSort(v,p,q);
mergeSort(v,q+1,r);
merge(v,p,q,r);
}
}
void output(vector<int> &v)
{
for(vector<int>::iterator iter=v.begin();iter!=v.end();iter++)
cout<<*iter<<" ";
}
int main()
{
vector<int>v;
input(v);
mergeSort(v,0,v.size()-1);
output(v);
system("PAUSE");
return 0;
}
2.3.1 归并排序
最新推荐文章于 2023-07-15 17:00:45 发布