计算一个tuple里面的逆序数,用merge sort的办法。我写了以下代码,但是每次统计的时候,count设置为全局变量了:

'''Count inversion

Input: a sequence as tuple of integers

Output: The inversion number as an integer'''

#Merge Sort Method

def merge(ListA, ListB):

"""key subroutine

function: merge 2 sorted lists"""

newlist = []

while ListA and ListB:

if ListA[0] > ListB[0]:

newlist.append(ListB[0])

ListB = ListB[1:]

global count

count += len(ListA)

else:

newlist.append(ListA[0])

ListA = ListA[1:]

if ListA:

newlist = newlist + ListA

elif ListB:

newlist = newlist + ListB

return newlist

def merge_sort(A):

"""input: A(a list) the length of A can be odd

output: sorted list

"""

#base case: If n = 1, done

if len(A) == 1:

return A

#recursion: divide into two parts

else:#A[1, (n/2)] A[(n/2)+1, n] merge 2 lists

middle = len(A)/2 #if len(A) is odd number, in Python it will return the lower int of the result

A = merge(merge_sort(A[:middle]), merge_sort(A[middle:]))

return A

count = 0

def count_inversion(sequence):

sequence = list(sequence)

merge_sort(sequence)

return count

print count_inversion((1, 2, 5, 3, 4, 7, 6))

print count_inversion((0, 1, 2, 3))

print count_inversion((99, -99))

print count_inversion((5, 3, 2, 1, 0))

如果只运行一次,那么这个程序是对的。但是如果要运行好几次,由于count是global变量,计算逆序数时每次都会再上一次运算的基础上再加上这一次计算得到的逆序数,造成了错误,怎么才能改掉这个bug?谢谢!

python逆序数的程序_计算逆序数(归并法)程序问题 (Python)相关推荐

  1. python 数据分析课程改革网_计算思维培养视域下《Python程序设计》课程的教学改革实践...

    龙源期刊网 http://www.qikan.com.cn 计算思维培养视域下< Python 程序设计> 课程的教学改革实践 作者:王亚萍 来源:<电脑知识与技术> 2018 ...

  2. python 数据分析课程改革网_计算思维培养视域下《Python程序设计》课程的教学改革实践-最新教育资料...

    计算思维培养视域下 < Python 程序设计> 课程的教学 改革实践 1 概述 2006 年 3 月,美国卡内基 . 梅隆大学计算机科学系主任周以 真( Jeannette M.Wing ...

  3. 二次指数平滑法matlab程序_二次指数平滑法程序

    二次指数平滑法程序 线性指数平滑法 Matlab 程序,代码如下: 注: Data- 原始数据 s- 一次和二次平滑结果 at- 预测式中的 a 参数 bt- 预测式中的 b 参数 y1- 预测结果 ...

  4. python 代码转程序_如何用pyinstaller把自己编写的python源代码转换成可执行程序?...

    昨天慢步熬夜写了一篇干货满满的文章,不知道什么原因,文章并未被推荐. 今天再来换个方式写一次. 把自己编写的python源代码转换成可执行程序 笔者继续用自编的<货币兑换程序3.0>为例. ...

  5. 运行github中python程序_从phon上的github直接运行python代码

    有没有移动pythonide可以让你直接从GitHub下载代码到应用程序中?事实上,IDE将是一个过火-我不需要在应用程序中编写代码,只需要运行代码作为一个快速演示来与人们讨论想法.我的代码不启动gu ...

  6. 用python做系统程序_新手小白做毕设,想用Python做一个系统,那么该学习哪方面的知识?...

    谢邀! 不知道你想做的是什么系统,我就按照平时我工作中接触到的系统,给你一些建议吧. 首先,无论是任何系统,只要是展示给用户的,那么所有的一切其实都是围绕着数据处理和展示来进行开发连接的.如下图: 围 ...

  7. 渐进式web应用程序_如何使用渐进式Web应用程序更快,更便宜地构建新应用程序...

    渐进式web应用程序 You need an app! The question is- which kind? 您需要一个应用程序! 问题是--哪种? For the last 8 years or ...

  8. python递归算法 电影院票价问题_算法课堂实验报告(二)——python递归和分治(第k小的数,大数乘法问题)...

    python实现递归和分治 一.开发环境 开发工具:jupyter notebook 并使用vscode,cmd命令行工具协助编程测试算法,并使用codeblocks辅助编写C++程序 编程语言:py ...

  9. 学python最重要的是_为什么越来越多的人选择学Python?

    为什么越来越多的人选择学Python? 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是一种开发语 ...

最新文章

  1. 兰州理工大学计算机考研真题,2017年兰州理工大学计算机与通信学院893计算机操作系统考研题库...
  2. docker常用命令,安装常用实例,一步式安装mysql
  3. 关于 Http 协议,你必须要知道的
  4. .NETCore3.1中的Json互操作最全解读-收藏级
  5. SQL语句:建表语句、插入语句、查询语句、增加列、删除列、查询语句like、修改语句
  6. Felix的Nodejs代码风格
  7. vijos1196|吃糖果游戏|博弈论
  8. 8086和8088微处理器之间的区别
  9. CentOS之安装Netcore运行hellowworld
  10. 移动端的meta标签
  11. SQL Server 数据库增删改查
  12. dvr行业的linux
  13. 鸿蒙系统怎么打开纯净模式,#手机[超话]##2021有点东西##OPP... - @安诺颜_ 的微博精选 - 微博国际站...
  14. [Tensorflow2] 梯度反转层(GRL)与域对抗训练神经网络(DANN)的实现
  15. 紫外测试样品要求及测试步骤
  16. GORM 基础 -- Associations
  17. java限定符_正则表达式之限定符
  18. 广东计算机等级考试延迟,2018年广东计算机等级考试报考工作要求及进度安排...
  19. iOS获取WiFi名字
  20. springboot 参数校验

热门文章

  1. ASP无组件上传带进度条
  2. 时间复杂度的一些计算规则
  3. Systemd 入门教程之实战篇
  4. linux mysql安装_Linux下安装mysql服务(超详细)
  5. Settings【学习笔记05】
  6. Hbase2.0版本安装教程
  7. 【机器学习实战之一】:C++实现K-近邻算法KNN
  8. 多线程编程 RW_LOCK 读写锁
  9. MATLAB各类函数详细讲解 simulike系统仿真分析
  10. iOS NSString和NSDate转换