#include <iostream>
#include <vector>
using namespace std;
std::vector<int> v1;
std::vector<int> v2;
int numArray[5]={8,21,66,158,15};
void merge(int * num,int begin,int mid,int end){// 对两个分治的数组进行何合并
int temp1=begin;
while(temp1<=mid){
v1.push_back(num[temp1++]);
}
int temp2=mid+1;
while(temp2<=end){
v2.push_back(num[temp2++]);
}// 首先存储数组
vector<int>::iterator it1,it2;
it1=v1.begin();
it2=v2.begin();
int pos=begin;//开始合并
while(it1!=v1.end() && it2!=v2.end()){
if (*it1<*it2){
num[pos++]=*it1;
++it1;
}
else{
num[pos++]=*it2;
it2++;
}
}
while(it1!=v1.end()){
num[pos++]=*it1;
++it1;
}
while(it2!=v2.end()){
num[pos++]=*it2;
++it2;
}
v1.clear();
v2.clear();
}
void mergeSort(int *num,int begin,int end){
if (begin<end)//退出条件
{// 递归调用
int mid=(begin+end)/2;
mergeSort(num,begin,mid);
mergeSort(num,mid+1,end);
merge(num,begin,mid,end);
}
}
int main(){
for (int i = 0; i < 5; ++i)
{
cout<<numArray[i]<<" ";
}
cout<<endl<<"after mergeSort..."<<endl;
mergeSort(numArray,0,4);
for (int i = 0; i < 5; ++i)
{
cout<<numArray[i]<<" ";
}
}
思路来源率 《算法东论》做了具体实现。