欢迎光临散文网 会员登陆 & 注册

【编程笔记】利用归并排序求逆序对

2023-01-05 10:29 作者:夕弦-Yamai_Yuzuru  | 我要投稿

逆序对的定义

对于数列的第 i 个和第 j 个元素,如果满足 i<j且 a[i]>a[j],则其为一个逆序对;否则不是。

归并排序求逆序对的思路

一个区间的逆序对数=左边逆序对的数+右边逆序对的数+跨边界的逆序对数。

其实就是在归并过程中,如果有的某一个数大于左边的一个数,就把左边遍历到的数字数量加上。因为左边是有序的,只要右边的数大于左边的一个数,就会大于左边那个数前面所有的数

平均时间复杂度为O(nlogn)。

归并排序求逆序对的过程

1. 递归左区间,计算左边逆序对的数

2. 递归右区间,计算右边逆序对的数

3. 循环比较左右区间,计算跨边界的逆序对数

4. 归并

而对于跨边界的逆序对数量,由归并排序的特点可知第三种情况的个数为当数组[i] > 数组[j] 时,i后面的所有数都大于数组[j]即个数为mid - i + 1。

利用归并排序求逆序对N-S图

感叹,归并真的神奇。

丹青·夕弦

夕弦的图片由NovelAI生成, 练了个新模型,但似乎效果和up红心咖啡_Official的差不多

【编程笔记】利用归并排序求逆序对的评论 (共 条)

分享到微博请遵守国家法律