分治-归并排序

来源:互联网 发布:python 字符串 函数 编辑:程序博客网 时间:2024/03/29 07:23

分治的框架结构

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();}



原创粉丝点击