分治法 归并排序(递归算法)
来源:互联网 发布:消防调试联动编程 编辑:程序博客网 时间:2024/05/23 22:32
当待排序的序列长度为1,递归“开始回升”,在这种情况下不要做任何工作,因为长度为1的每个序列都以排好序。
分解—>解决—>合并
#include<cstdio>using namespace std;int MERGE(int *A, int p, int q, int r){ int n1 = q - p + 1; int n2 = r - q; int L[1000],R[1000]; //初始化数组L[]R[]为无穷大(分别定义两个数组最后的值为哨兵即无穷大); for(int i = 0; i <= n1+1; i++) L[i] = 1 << 30; for(int i = 0; i <= n2+1; i++) R[i] = 1 << 30; //分别向数组L[]R[]赋值; for(int i = 1; i <= n1;i++) L[i] = A[p + i - 1]; for(int j = 1; j <= n2;j++) R[j] = A[q+j]; //重新定义i,j(之前在以上四个for循环中定义的i,j寿命只限于其所在的for循环中); int i = 1; int j = 1; //进行归并; for(int k = p; k <= r; k++){ if(L[i] <= R[j]){ A[k] = L[i]; i++; } else { A[k] = R[j]; j++; } }}int MERGE_SORT(int *A,int p,int r){ if(p < r) { int q = ((p+r)/2); //进行递归; MERGE_SORT(A,p,q); MERGE_SORT(A,q+1,r); MERGE(A,p,q,r); }}int main(){ int A[10000]; int p,r,n; scanf("%d",&n); p = 1; r = n; printf("输入原数组:\n"); for(int i = 1;i <= n;i++) scanf("%d",&A[i]); MERGE_SORT(A,p,r); printf("归并后的结果为:\n"); for(int j = 1;j <= n;j++) printf("%d ",A[j]); return 0;}
实验室的锁让我搞坏了,先写这些,要去解决锁的问题了。
0 0
- 分治法 归并排序(递归算法)
- 分治+递归:归并排序的递归算法
- 归并排序 分治+递归
- 归并排序(分治算法)
- 排序算法之归并排序(分治法排序)
- 递归与分治:归并排序法
- 归并排序(递归与分治)
- 【算法】分治法(快速排序,归并排序)
- 分治算法--归并排序
- 分治算法-归并排序
- 分治算法-归并排序
- 算法--分治归并排序
- 归并排序-分治算法
- 分治算法---归并排序
- 合并排序/归并排序(递归与分治)-算法设计与分析
- 分治与递归----归并排序
- 分治法(归并排序)
- 归并排序(分治法)
- Pat(Advanced Level)Practice--1093(Count PAT's)
- Nginx+Tomcat实现单IP、多域名的访问?
- Linux 日志级别(loglevel)详解
- cocos2d 《watchout》笔记
- Hive总结(九)Hive体系结构
- 分治法 归并排序(递归算法)
- MVC模式与三层架构的区别
- UML状态图
- 新兴Web技术杂谈 之 WebSocket
- hive大数据倾斜总结
- Pat(Advanced Level)Practice--1094(The Largest Generation)
- 第十一周【项目0 - 是春哥啊】
- Nginx+Tomcat多站点访问默认主页问题
- intent传递参数