分治的框架结构
procedure DIVIDE()
begin
if(问题不可分)then//解决
begin
直接求解;
返回问题的解;
end
else begin
对原问题进行分治;//分解
递归对每一个分治的部分求解;
归并整个问题,得出全问题的解;//合并
end
end;
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
void merge(vector<T>& array,vector<T>& tmp_array,int left,int center,int right){ //线性时间归并
int l_pos=left;
int l_end=center;
int r_pos=center+1;
int r_end=right;
int n_elemt=center-left+1;
while(l_pos<=l_end&&r_pos<=r_end){
if(array[l_pos]<array[r_pos]){
tmp_array[left++]=array[l_pos++];
}
else{
tmp_array[left++]=array[r_pos++];
}
}
while(l_pos<=l_end){
tmp_array[left++]=array[l_pos++];
}
while(r_pos<=r_end){
tmp_array[left++]=array[r_pos++];
}
for(int i=0;i!=tmp_array.size();i++){
array[i]=tmp_array[i];
}
}
template<typename T>
void merge_sort(vector<T>& array,vector<T> & tmp_array,int left,int right){
int center(0);
center=(left+right)/2;
if(left<right){
merge_sort(array,tmp_array,left,center);//分治
merge_sort(array,tmp_array,center+1,right);
merge(array,tmp_array,left,center,right);//合并
}
}
template<typename T>
void merge_sort(vector<T>& array,int size){
vector<T> tmp_array(array);
merge_sort(array,tmp_array,0,array.size()-1);
}
int main()
{
vector<int> array;
array.push_back(1);
array.push_back(3);
array.push_back(8);
array.push_back(4);
array.push_back(2);
merge_sort(array,array.size()-1);
for(int i=0;i!=array.size();i++){
cout<<array[i];
}
getchar();
}