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

最新文章

  1. 关于C#的继承结论
  2. Spring MVC4 纯注解配置教程
  3. 1、C语言基本数据类型
  4. Javascript 笔记与总结(1-3)arguments
  5. 1 TKinter小窗口及标题
  6. JavaScript设计模式 -- 读书笔记
  7. css中的:before与:after的简单使用
  8. Jquery为下拉列表动态赋值与取值,取索引
  9. IOS中线程的通信
  10. c语言:快速排序
  11. ecshop 去版权
  12. 利用jenkins做项目的自动化部署
  13. mysql +keeplive+drbd高可用架构
  14. 【memcache】windos下 memcache更改默认的端口和最大使用内存
  15. apigw鉴权分析(1-5)亚马逊 - 鉴权分析
  16. mysql 设置自增主键id的起始值
  17. ELK 构建 MySQL 慢日志收集平台详解
  18. Linux之 proc文件系统
  19. scrapy的基本语法
  20. grunt,提示node不是内部命令也不是外部命令

热门文章

  1. 深入理解 C/C++ sizeof() 运算符
  2. 2020 kali linux 4 安装搜狗输入法
  3. ios输入法弹出输入框定位错乱
  4. Java多线程之synchronized和volatile
  5. C语言实现反转链表 II(指定2个节点反转)
  6. 自己的系统重装之后,怎么去重新的装官方的office办公软件,详细教程
  7. 2020牛客寒假算法基础集训营6 C 汉诺塔 (dp 最长下降子序列)
  8. springboot~gradle4.7之后的lombok引用方法
  9. 洛谷 pP2708 硬币翻转
  10. 初识压缩感知Compressive Sensing