归并排序顺带求逆序对
来源:互联网 发布:Bigbang yg知乎 编辑:程序博客网 时间:2024/05/22 08:21
以前没有学过归并排序,所以这次研究逆序对很是困难。
感谢这位大神,让我终于AC 了逆序对:http://blog.csdn.net/shen823797837/article/details/8794919
其实它的思想与归并排序是一样的,并且是基于归并排序的。
先求各个部分(分治)的逆序对个数,并将该部分的原数组排序。在归并的时候比较两个部分中数的大小,这里排序就派上用场了
#include <iostream>#include <string>using namespace std;int msort(int a[], int px[], int l, int r)//注意px和a数组是在递归过程中不断互换的,因为在递归过程中会进行排序{ if (l == r) return 0; int mid = l + (r - l) / 2; int left = msort(px, a, l, mid); int right = msort(px, a, mid + 1, r); int i = mid, j = r, k = r + 1; int ans = left + right; while (i >= l && j >= mid+1) { if (px[i] > px[j]) { a[--k] = px[i--]; ans += j - mid; } else a[--k] = px[j--]; } while (i >= l) a[--k] = px[i--]; while (j >= mid + 1) a[--k] = px[j--]; return ans;}int zhongzhuan(int a[], int n){ int px[110]; for (int i = 0; i < n; ++i) px[i] = a[i]; return msort(a, px, 0, n-1);}int main() { int a[10] = {7, 5, 6, 4}; cout << zhongzhuan(a, 4) << endl; return 0;}
- 归并排序顺带求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对~~~
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 简单工厂模式
- oem中文页面乱码问题
- JavaEE知识整理系列(五)JNDI
- android的一些常用手机信息获取
- linux openssh 代理转发总结
- 归并排序顺带求逆序对
- 计算机视觉、机器学习相关领域论文和源代码大集合
- 领域驱动设计建模思考与实践
- ceshino004
- LC振荡电路
- Tomcat的优化
- 编译链接之----地址无关代码(PIC)总结
- 一个Oracle格式化字符串的函数
- mtk手机如何root