2.3-2重写MERGE
来源:互联网 发布:巴巴熊软件下载 编辑:程序博客网 时间:2024/05/14 02:38
MERGE 过程,使之不使用哨兵元素,而是在一旦数组 L 或 R 中的所有元素都
被复制回数组 A 后,就立即停止,再将另一个数组中余下的元素复制回数组 A 中
#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++; continue; } else { A[k] = R[j]; j++; continue; } if(i >= n1 && j < n2){ A[k] = R[j]; j++; continue; } if(i < n1 && j >= n2){ A[k] = L[i]; i++; continue; } }}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[1000]; 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
- 2.3-2重写MERGE
- Merge 2 Sorted Lists
- merge
- merge
- MERGE
- merge
- Merge
- MERGE
- merge
- merge
- merge
- Merge
- merge
- Merge
- Merge
- Merge
- merge
- MERGE
- Android:操作图片Exif信息
- CAPropertyAnimation 用法
- JAVA实现简单的冒泡排序与选择排序
- require.js 简洁入门
- 查询出部门名称、部门的员工数、部门的平均工资、部门的最低收入雇员姓名和最高收入雇员的姓名
- 2.3-2重写MERGE
- 最小公共祖先 (Tarjan) POJ1470
- HTML总结
- 让Apache 和nginx支持跨域访问
- 5.18
- 133.找出分数最低的学生
- 【笔记】JVM内存回收理论与实现
- 一个曾经失眠九年的工程师告诉你怎样拥有更好的睡眠
- 取消的批審取消功能