递归与分治算法
来源:互联网 发布:遗传算法讲解 编辑:程序博客网 时间:2024/05/16 13:04
现在开始看些经典的算法,就先研究了下递归与分治算法!
分治算法思想:分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各子问题的解合并得到原问题的解。
首先看了合并排序,用的是递归的分治算法,(非递归和自然分治以后会继续写)。下面附上源代码:
</pre><pre name="code" class="cpp">#include <iostream>#include <cstring>using namespace std;const int length = 50;/**合并排序的递归方式**///合并bool merge(int *arr,int *arrylist,int begin,int mid,int end){ int i = begin; int j = mid+1; int k = begin; //进行合并,因为每一边已经是个排序好的序列 while(i<=mid && j<=end){ if(arr[i]<=arr[j]) { arrylist[k++] = arr[i++]; } else { arrylist[k++] = arr[j++]; } } //表示左边的剩余的都是比较大的 while(i<=mid) { arrylist[k++] = arr[i++]; } //表示右边的剩余的都是比较大的 while(j<=end) { arrylist[k++] = arr[j++]; } //把arrylist拷贝给arry memcpy(arr+begin,arrylist+begin,(end-begin+1)*sizeof(arr[0])); return true;}// 把序列不停的平分,直到子序列的begin和end相等bool MergeSort(int *arr,int *arrylist,int begin,int end){ //当序列的begin与end为一个时返回 if(begin==end) { return true; } int mid = (begin+end)/2; //把序列平分排序,分治思想,把大的任务分成较小的任务 MergeSort(arr,arrylist,begin,mid); MergeSort(arr,arrylist,mid+1,end); //排序好后,进行合并 merge(arr,arrylist,begin,mid,end); return true;}//合并排序需要一些额外的内存空间bool preMergeSort(int *arr,int begin,int end){ //申请需要的内存空间 int *arrylist = new int[end-begin+1]; //合并排序 MergeSort(arr,arrylist,begin,end); return true;}int main(){ int arr[length],temp,i=0,end; while(cin>>temp) { arr[i++] = temp; } end = i-1; preMergeSort(arr,0,end); for(i=0;i<=end;i++) { cout<<arr[i]<<" "; } return 0;}
0 0
- 分治与递归算法
- 递归与分治算法
- 算法--递归与分治策略
- 递归与分治算法初步学习
- 算法复习-递归与分治策略
- 递归与分治算法实验报告
- 算法之浅谈递归与分治
- 算法时间复杂度----分治与递归
- 【算法·递归与分治】二分查找
- 算法复习2:递归与分治策略
- 算法基础篇(3)------递归与分治
- 棋盘覆盖递归与分治算法
- java递归分治算法
- 算法设计与分析之递归与分治策略
- 递归与分治策略(一)---算法设计与分析
- 【算法设计与分析】递归与分治----2.4 排列问题
- 分治与递归(算法分析与设计)
- 算法设计与分析笔记——递归与分治
- Python 的 urllib2
- keil工具之uvmpw文件
- 正则表达式语法
- 正则表达式入门
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- 递归与分治算法
- LRU最近最久未使用算法
- 互联网协议入门(一)
- linux 权限掩码 umask
- 【SuperMap .Net 组件】地图与场景同步(二) 视图范围同步
- Java之JNI参数传递
- GRE作文备考——行动理论
- 反病毒工具-Wireshark
- 使用jquery为dropdownchecklist动态设置值