分治-归并排序
来源:互联网 发布: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();}
- 分治法,归并排序
- 分治-归并排序
- 分治法-归并排序
- 分治法-归并排序
- 归并排序-分治法
- 归并排序 分治+递归
- 归并排序,分治思想
- 分治(归并排序)
- 分治思想 归并排序
- 归并排序(分治)
- 分治算法--归并排序
- 分治法 - 归并排序
- 分治-归并排序1
- 分治归并排序2
- 分治法--归并排序
- 归并排序 分治法
- 归并排序--分治法
- 分治法 & 归并排序
- 在Word文档中连继用代码添两个表的方法
- 系统启动后的 wifi 加载过程
- 云计算知识库
- linux时间处理
- 12条有用的Flex代码
- 分治-归并排序
- 女人和计算机
- STDIN_FILENO与stdin的区别与作用
- android apk源代码反编译
- 12306窘境的启示
- objective_c 单例模式Singleton
- android Uri.Buildr 与string 互转
- shellcode
- 英语练习64 The hare and the turtle