算法导论2-4 O(nlgn)时间复杂度求逆序对
2024-08-24 05:48:58
def mergesort(nums,le,ri):
if le>ri-2:
return 0
mi=le+(ri-le)//2
a=mergesort(nums,le,mi)
b=mergesort(nums,mi,ri)
c=merge(nums,le,mi,ri)
return a+b+c
def merge(nums,le,mi,ri):
i,j=le,mi
data=[]
count=0
while i<mi and j<ri:
if nums[i]<nums[j]:
data.append(nums[i])
i+=1
else:
print(nums[i],nums[j])
data.append(nums[j])
j+=1
count+=mi-i
while i<mi:
data.append(nums[i])
i+=1
while j<ri:
data.append(nums[j])
j+=1
nums[le:ri]=data
return count
x=mergesort(a,0,len(a))
print(a)
print(x)
解释:就是在merge里加一个计数器,若A[I]>A[J]则A[J]和A[I]到A[MID-1]的所有元素都构成逆序对,即count+=(mid-1)-i+1=mid-i
最新文章
- 关于C#的继承结论
- Spring MVC4 纯注解配置教程
- 1、C语言基本数据类型
- Javascript 笔记与总结(1-3)arguments
- 1 TKinter小窗口及标题
- JavaScript设计模式 -- 读书笔记
- css中的:before与:after的简单使用
- Jquery为下拉列表动态赋值与取值,取索引
- IOS中线程的通信
- c语言:快速排序
- ecshop 去版权
- 利用jenkins做项目的自动化部署
- mysql +keeplive+drbd高可用架构
- 【memcache】windos下 memcache更改默认的端口和最大使用内存
- apigw鉴权分析(1-5)亚马逊 - 鉴权分析
- mysql 设置自增主键id的起始值
- ELK 构建 MySQL 慢日志收集平台详解
- Linux之 proc文件系统
- scrapy的基本语法
- grunt,提示node不是内部命令也不是外部命令
热门文章
- 深入理解 C/C++ sizeof() 运算符
- 2020 kali linux 4 安装搜狗输入法
- ios输入法弹出输入框定位错乱
- Java多线程之synchronized和volatile
- C语言实现反转链表 II(指定2个节点反转)
- 自己的系统重装之后,怎么去重新的装官方的office办公软件,详细教程
- 2020牛客寒假算法基础集训营6 C 汉诺塔 (dp 最长下降子序列)
- springboot~gradle4.7之后的lombok引用方法
- 洛谷 pP2708 硬币翻转
- 初识压缩感知Compressive Sensing