归并排序(分治思想)
来源:互联网 发布:golang prometheus 编辑:程序博客网 时间:2024/05/17 13:41
分治:
划分问题:把序列分成元素个数尽量相等的两半
递归求解:把两半元素分别排序
合并问题:把两个有序表合并成一个
#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>using namespace std;void merge_sort(int *A,int x,int y,int *T){ if(y-x>1) { int m=x+(y-x)/2; //划分成左右两半数组 int p=x,q=m,i=x; //p记录左半数组的最左边位置,q记录分界位置同时也是左半数组不可到达的右边界,右半数组的最左边位置 merge_sort(A,x,m,T); //i也是记录最左边界 merge_sort(A,m,y,T); while(p<m||q<y) //左半数组没有遍历一遍或右半数组没有遍历一遍进入循环 { if(q>=y||(p<m&&A[p]<=A[q])) //右半数组已经遍历完或左半数组没有遍历完同时当前所指定的左半数组元素小于等于右半数组元素 T[i++]=A[p++]; else T[i++]=A[q++]; } for(i=x;i<y;i++) //将已经排完序的元素转回到A数组中 A[i]=T[i]; }}int main(){ int a[100],b[100]; int n; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) scanf("%d",&a[i]); merge_sort(a,0,n,b); for(int i=0;i<n;i++) printf("%d ",a[i]); } return 0;}
0 0
- 归并排序(分治思想)
- 归并排序(分治思想)
- 归并排序,分治思想
- 分治思想 归并排序
- 分治思想应用:归并排序
- 分治思想之归并排序
- 分治思想之归并排序
- 归并排序模版(分治思想)
- 归并排序——分治思想
- [数据结构]折半搜索、归并排序( 分治思想)
- 分治(归并排序)
- 归并排序(分治)
- 归并排序(分治)
- <菜鸟学算法-A排序(分治的思想:归并排序)>
- 分治法(归并排序)
- 归并排序(分治法)
- 归并排序(分治法)
- 归并排序(分治算法)
- Apache Tomcat8必备知识
- hdu-2030-汉字统计
- 抽屉原理
- 2、随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组中。
- Unix/Linux环境C编程入门教程(32) 环境变量那些事儿
- 归并排序(分治思想)
- 找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没鞍点),打印出有关信息。
- ajax jquery 上传文件
- cocos2d-x 实现跨平台的目录遍历
- 天气预报--查询其他城市天气功能实现
- HDU 2015 偶数求和
- poj 3264 线段树/RMQ(区间最大减最小)
- Light OJ 1231(背包dp)
- “Hello world!”