归并排序求逆序数

归并排序是一种分治思想下的排序算法:将待排序序列不断划分(一般是二分)为多个更小的序列,直至不可划分,然后使每个最小区间内部是有序的(最小区间一般只有一个数,自然是有序的),然后再逆着刚才的划分过程不断地将小区间合并为较大的区间(这里是整个算法实现排序的核心,主要的计算量之所在),最终逆过程结束后,排序完成。

具体如下图(图片来自百度百科):
这里写图片描述
我们不难看出,该算法是稳定的,也就是说:对于每一个排序阶段(对应于上图每一行),其中每一个子区间(对应于上图中的方框)中的数,在该阶段中不会跑到子区间外面去,这就使得如果一开始的的总的序列里含有相同的数,那么排完序之后他们之间的相对位置不会变,这是对稳定的一般解读。

但是,这种稳定的性质其实也可以用于求序列的逆序数。比如,在图中倒数第三行的4 10方框,与3 6方框,对于3这个数,前面方框中有两个比它大的数,即4 10,这两个数在他们的方框中无论顺序怎么变,这个框中比3大的数还是只有两个,对于6也是这样,前面方框中比它大的数无论顺序如何,只有一个10,于是后面的方框对于前面的方框求逆序数的过程就完成了,我们再求完2 8和5 7两个框的逆序数时,只需加上4 10和3 6的结果就可以了。同样,对于4 10,3 6框内部也可以在之前的过程中求出部分的结果,而且他们是可以累加的,累加到归并排序最后就是总序列的逆序数,这样算法便实现了。

这里贴一个链接,再不明白的仔细看一看链接里面讲的及其代码(重点是代码)就好了。
https://blog.csdn.net/morewindows/article/details/8029996

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值