Node:普通归并
2015-07-13 20:23
615 查看
#include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> #include <stack> #include <queue> #define flush(arr,i) memset(arr,i,sizeof(arr)) using namespace std; const int maxn=1010; int arr[maxn], tmp[maxn]; int n,m; //向上归并的实现 void mergeUp(int l, int m, int r) { int i = l, j = m + 1, pos = l; //依次取数据到tmp中,左区间[l...m],右区间[m+1...r] while( i <= m && j <= r) { if(arr[i] < arr[j]) tmp[pos++] = arr[i++]; else tmp[pos++] = arr[j++]; } //将剩下的有序序列添加到tmp之后 while(i <= m) tmp[pos++] = arr[i++]; while(j <= r) tmp[pos++] = arr[j++]; //排序成功拷贝 for(int k = l; k <= r; k++) arr[k] = tmp[k]; } //向下划分 void mergeSort(int l,int r) { if(l < r) { int m = (l + r) / 2; mergeSort(l, m); mergeSort(m + 1, r); //向上归并 mergeUp(l, m, r); } } int main() { freopen("data.txt","r",stdin); scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d",arr + i); for(int i = 0; i < n; i++) printf("%d%c", arr[i], i == n-1 ? '\n' : ' '); mergeSort(0, n - 1); for(int i = 0; i < n; i++) printf("%d%c", arr[i], i == n-1 ? '\n' : ' '); return 0; }
相关文章推荐
- Javascript SHA-1:Secure Hash Algorithm
- [转]可视化的数据结构和算法
- 统计文件中不小于某一长度的单词的个数(泛型算法实现)
- 使用他人的MD5编码类,修改形成密码串
- Extracting Structured Data from Web Pages
- (译)Cocos2d_for_iPhone_1_Game_Development_Cookbook:1.13使用CCTexture2DMutable调换调色盘
- Java中3DES加密
- Refactoring Notes-Refactoring Methods(3)
- 图书馆管理程序~~不过貌似功能!!有空再修修
- trainging contest#2(2011成都现场赛)I BY Hyoga
- C/C++头文件包含内容概览
- 堆栈的应用(1) 平衡符号 C++实现
- 程序员编程艺术第一章、左旋转字符串
- 程序员编程艺术:第三章续、Top K算法问题的实现
- 程序员编程艺术:第四章、现场编写类似strstr/strcpy/strpbrk的函数
- 十四、第三章再续:快速选择SELECT算法的深入分析与实现
- 程序员编程艺术:第七章、求连续子数组的最大和
- 程序员编程艺术:第八章、从头至尾漫谈虚函数
- 程序员编程艺术:第九章、闲话链表追赶问题
- 程序员编程艺术:第十章、如何给10^7个数据量的磁盘文件排序