归并排序 简单版
来源:互联网 发布:jsp和javascript 编辑:程序博客网 时间:2024/04/30 06:36
下面是我整理刘汝佳算法的代码,按照自己格式改了改,还有另一种比较适合自己
#include<stdio.h>#include<string.h>#include<math.h>#include <queue>#include <iostream>#include<algorithm>using namespace std;const int N=10000+2;int A[N];int T[N];void Merge_sort(int l,int r){ if (r-l>1) { int mid=l+(r-l)/2; int p=l,i=l,q=mid; Merge_sort(l,mid); Merge_sort(mid,r); while (p<mid||q<r) { if (q>=r||(p<mid&&A[p]<=A[q])) T[i++]=A[p++]; else T[i++]=A[q++]; } for (i=l;i<r;i++) A[i]=T[i]; }}这是算法书里面的求逆序对的解法,但是它的合并比较好理解,用了三个循环
#include<stdio.h>#include<string.h>#include<math.h>#include <queue>#include <iostream>#include<algorithm>using namespace std;const int N=10000+2;int A[N];int B[N];int r;void merge(int l, int h) { if (l >= h-1) { return; } int m = l + (h - l) / 2; merge(l, m); merge(m, h); int i = l, j = m, k = l; while (i < m && j < h) { if (A[i] > A[j]) { B[k++] = A[j++]; r += m - i; } else { B[k++] = A[i++]; } } if (i < m) { for (; i < m; i++) { B[k++] = A[i++]; } } if (j < h) { for (; j < h; j++) { B[k++] = A[j++]; } } for (int x = l; x < h; x++) { A[x] = B[x]; }}int main() { int n; while (cin>>n) { r=0; for (int i=0;i<n;i++) cin>>A[i]; merge(0, n); for (int i = 0; i < n; i++) { cout << A[i] << " "; } cout << endl; cout << "reverse pair number is " << r << endl; }}
0 0
- 归并排序 简单版
- 排序:简单排序-归并
- 归并排序(简单实现)
- 简单算法--归并排序
- 归并排序--简单实现
- 简单归并排序
- 简单的归并排序
- 归并排序的简单算法
- 文件归并排序简单实现
- 归并排序的简单实现
- 归并排序的简单实现
- poj2388 简单排序——归并排序
- java实现简单排序算法:归并排序
- C#版归并排序
- 归并排序C++版
- Java版归并排序
- 归并排序 python版
- 排序-归并排序(递归版)
- python标准库 循环器
- 堆的应用——优先级队列
- MVC结构中session的应用
- maven之插件
- 文章标题
- 归并排序 简单版
- Spring学习笔记(二) IoC容器与Bean
- 207. Course Schedule
- 牛顿法与拟牛顿法,DFP法,BFGS法,L-BFGS法
- 2016.9.19完美世界编程
- DirectX学习笔记(十):3D字体的实现及用ID3DXFont接口绘制文本
- (iOS逆向工程)class-dump 安装与使用
- FarManager3 打开界面混乱问题
- 139. Word Break