博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求逆序对数总结 & 归并排序
阅读量:6892 次
发布时间:2019-06-27

本文共 1264 字,大约阅读时间需要 4 分钟。

用归并排序方式

最原始的方法的复杂度是O(n^2)。

使用归并排序的方式,可以把复杂度降低到O(nlgn).

 

设A[1..n]是一个包含N个非负整数的数组。如果在i〈 j的情况下,有A〉A[j],则(i,j)就称为A中的一个逆序对。

例如,数组(3,1,4,5,2)的“逆序对”有<3,1>,<3,2><4,2><5,2>,共4个。

 

注:我觉得方法是在归并过程中,记录每次归并,后面的分组中被放到了前面的元素的个数。

 

的确是这样的。下面这个也是MergeSort的基本算法框架:

 int gCount = 0;  template
int merge(Iterator begin, Iterator mid, Iterator end) { Iterator iL = begin; Iterator iR = mid; int count = distance(begin, end); vector
v(count); vector
::iterator it = v.begin(); while(iL != mid && iR != end) { if(*iL <= * iR) { *it++ = *iL++; } else { gCount += distance(iL, mid); *it++ = *iR++; } } if(iL == mid) copy(iR, end, it); if(iR == end) copy(iL, mid, it); copy(v.begin(), v.end(), begin); return 0;}template
int mergeSort(Iterator begin, Iterator end){ int count, step; count = distance(begin, end); if(count <= 1) { return 0; } step = count / 2; mergeSort(begin, begin + step); mergeSort(begin + step, end); merge(begin, begin + step, end); return 0;}

重点在 gCount += distance(iL, mid) (注:distance其实就是位置的减法)

逆序对数实质就是插入排序过程中要移动元素的次数。

要移动的元素的位数即第一个序列中还未插入到新序列中的元素的个数

即: distance(iL, mid)

转载地址:http://bchbl.baihongyu.com/

你可能感兴趣的文章
安装vue-cli 3.0和注意事项
查看>>
【Vue.js 牛刀小试】:第十一章 - Vue 中 ref 的使用
查看>>
JSX
查看>>
LeetCode 之 JavaScript 解答第239题 —— 滑动窗口最大值(Sliding Window Maximum)
查看>>
一个项目带你走进产品经理的世界(2)需求分析
查看>>
css经典布局——圣杯布局
查看>>
Java基础系列五
查看>>
代码重构那些事儿
查看>>
css3常用属性总结(1)
查看>>
全国416个本科专业被撤销!哪些新专业或成为“爆款”?
查看>>
SQLServer之创建索引视图
查看>>
面试集锦(六)数据结构(2)
查看>>
VimWiki的一些技巧
查看>>
GMQT全球通用积分重磅推出
查看>>
spring cloud构建互联网分布式微服务云平台-路由网关(zuul)
查看>>
Parasoft dotTEST(10.4.1)更新亮点——在.NET应用程序中构建安全性
查看>>
Nginx 配置
查看>>
混沌工程究竟用来解决什么问题?
查看>>
如何写好一片文章
查看>>
vue项目前后端实现
查看>>