博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
逆序对的三种解法
阅读量:5081 次
发布时间:2019-06-13

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

设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相同。
如果存在正整数 i, j 使得 1 ≤ i < j ≤ n 而且 A[i] > A[j],则 <A[i], A[j]> 这个有序对称为 A 的一个逆序对。
 
逆序对的解法
 
第一种:冒泡法(暴力)/ 枚举
直接对原序列进行冒泡排序,统计交换次数,得到的交换次数=逆序对数。
注:求相邻元素的交换次数等价于求序列的逆序对数
 
第二种:归并排序
对原序列进行归并排序,在每次合并两数组时可以直接统计逆序对的个数。针对左有序序列中的第i号元素,和右有序序列中的第j号元素,若存在 a[j] < a[i] ,则a[i]后的所有
元素都大于a[j]。这种情况下 逆序对的个数result = mid - i + 1
 
第三种:离散化 + 树状数组
先利用离散化,一次性读入所有数据,然后记录读入数据的下标和值,按照值的大小对值和下标进行排序。得到新的数据后,建立以新的值(排序的序号)为下标的树状数组,树状数组的值为当前状态下该位值出现的次数。在每次向树状数组插入元素时,都利用树状数组查询比当前插入元素的值更大的元素出现的个数。
 

转载于:https://www.cnblogs.com/lxqiaoyixuan/p/9742762.html

你可能感兴趣的文章
1. DNN神经网络的前向传播(FeedForward)
查看>>
JAVA-初步认识-常用对象API(集合框架-List和Set的特点)
查看>>
2017.0321.数字电路与系统-触发器
查看>>
hbase 常用命令大全
查看>>
020--python函数基础知识考试(包括:函数_递归等知识)
查看>>
字符串转化整数与回文数
查看>>
hammer使用: 代码:捏合、捏开、图片放大 的一个手机图片“放大缩小可拖动”的小效果...
查看>>
Java写的斗地主游戏源码
查看>>
[HEOI2016] 序列
查看>>
关于制作C语言头文件的思考
查看>>
SEH与虚函数
查看>>
AOP - 2 实例(SpringBoot 注解方式)
查看>>
编译和运行时的界限在哪儿?
查看>>
RequireJS进阶(三)
查看>>
NIO buffer 缓冲区 API
查看>>
实验2
查看>>
ubuntu下安装飞鸽传书
查看>>
淡入淡出文字垂直滚动
查看>>
freemarker对数字的处理
查看>>
云计算之路-Azure vs 阿里云:从负载均衡中摘/挂虚拟机
查看>>