归并排序
来源:互联网 发布:mac live photo 编辑:程序博客网 时间:2024/06/08 14:25
划分问题:把序列分成元素个数尽量相等的两半
递归求解:把元素两半分别排序
合并问题:把两个有序表合并成一个。每次只需要把两个序列的最小元素加以比较,删除其中的较小元素并加入合并后的新表,我们需要一个附加空间t来进行新表的储存。
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int N = 5000;int a[N << 1],t[N << 1],n;void merge_sort(int x, int y){ if(y - x > 1){ int mid = x + (y -x)/2; int p = x, q = mid, i = x; merge_sort(x, mid); merge_sort(mid, y); while(p < mid || q < y){///左右有一个非空就继续合并 if(q >= y || (p < mid && a[p] <= a[q]))///从左半数组复制到临时空间(右半数组为空,那么左半数组必不为空) t[i++] = a[p++]; else t[i++] = a[q++]; } for(int i=x; i<y; i++) a[i] = t[i]; }}int main(){// freopen("in.txt", "r", stdin); while(scanf("%d",&n) == 1){ for(int i=1; i<=n; i++) scanf("%d",&a[i]); merge_sort(1,n+1); for(int i=1; i<=n; i++) printf("%d ",a[i]); printf("\n"); } return 0;}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- mac中的软件如何选择隐藏目录?
- 汇编学习之基本指令
- 题目1029:魔咒词典
- 宇宙中最强大的开发环境免费了!
- PHP的静态变量介绍
- 归并排序
- 安卓-教你使用IXListView上拉更多,下拉刷新(2)
- 关于Map遍历和Iterator的keySet和entrySet
- vs创建dll工程
- fmdb -> intForQuery
- UVa-232 - Crossword Answers
- hdu 4920——Matrix multiplication
- Cocos2d-android游戏引擎----图形引擎
- poj 1236 Network of Schools (强连通分支缩点)