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

计算一个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?谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手写Java线程池_超详细解说_绝对能运行_代码超详细注释

线程池 问题背景 只是单纯使用 new Thread(runnable).start(); 的方式创建线程, 将会导致严重的程序性能问题: 1.线程创建, 销毁需要消耗很大的系统资源; 2.虚拟机创建线程的数量是有限的; 2.线程调度切换也将使程序性能下降; 针对这些问题, 对线程数量进行管理, 有效地重复利…

分享一个非常 nice 的工具

最近有个问题,我需要经常使用远程连接工具,原因很简单,我需要控制另外一台电脑,我刚开始使用的是 teamviewer 这个软件,刚开始用的时间是非常爽的,不过有一天他给我来了个提示,说我的软件被商用…

Java并发性和多线程介绍目录

http://ifeve.com/java-concurrency-thread-directory/转载于:https://www.cnblogs.com/hanfeihanfei/p/6840359.html

js 正则是否包含某些字符串_JS 判断字符串中是否包含某个字符串(方法总结)...

我是想在js中判断字符串是否包含某个中文,将方法记录起来,这些方法也适用于数字、字母。实践是检验真理的唯一标准,还是要多多测试啊。String对象的方法方法一:indexOf()var groupName"小白A组";alert(groupName.indexO…

推荐周立功先生的一本书

1. 这篇文章主要是推荐周工的一本书,大家在学习嵌入式的时候,很多人不明白嵌入式系统和单片机的区别,又感觉自己对嵌入式有所了解,知道什么是嵌入式,文章里的很多见解我觉得对很多人都非常有帮助,今晚上周工…

图管够!灌篮高手、女儿国…阿里日_这帮程序员太会玩了!

5月10日是阿里一年一度的阿里日,这对阿里人来说,是个非常特别的日子。 那什么是阿里日呢?看看官方介绍: 它起源于2005年4月20日,是为了纪念2003年5月的“非典”时期阿里人的激情和信念。因此阿里巴巴决定,今…

复习Object类_日期时间类_System类_StringBuilder_包装类以及各类的细节

Object类_日期时间类_System类_StringBuilder_包装类以及各类的细节 主要内容 Object类Date类DateFormat类Calendar类System类StringBuilder类包装类 第一章 Object类 1.1 概述 java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都…

sql 整改措施 注入_SQL注入的漏洞及解决方案

一、sql注入漏洞1. SQL注入漏洞SQL注入攻击(SQL Injection),简称为注入攻击,SQL注入,被广泛用于非法获取网站控制权。这是在应用程序的数据库层中发生的安全漏洞。在设计程序中,忽略了对输入字符串中包含的SQL命令的检查&#xff…

check-lxdialog.sh: line 3: $'\r': command not found

问题 make all make[1]: Entering directory /cygdrive/d/AiThinkerIDE_V0.5/cygwin/home/aithinker/project/esp-idf/tools/kconfig /cygdrive/d/AiThinkerIDE_V0.5/cygwin/home/aithinker/project/esp-idf/tools/kconfig/lxdialog/check-lxdialog.sh: line 3: $\r: command…

Qt setMargin()和setSpacing() 的含义

mainLayoutnewQVBoxLayout(this); mainLayout->setMargin(30); //表示控件与窗体的左右边距 mainLayout->setSpacing(40); //表示各个控件之间的上下间距转载于:https://www.cnblogs.com/invisible2/p/6843159.html

复习Collection_迭代器使用细节_泛型_综合案例

Collection_迭代器使用细节_泛型_综合案例 主要内容 Collection集合迭代器增强for泛型 第一章 Collection集合 1.1 集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据。 集合和数组既然都是容器,他们之间的区别: 数组的…

esp32 coredump分析

写文章的原因 网上很多人写了 esp32 的coredump 分析,好吧,我看了下,都是从网上摘抄的,根本跑不通,我想写一个给大家有用的。 官网文章 https://esp-idf-zh.readthedocs.io/zh_CN/latest/api-guides/core_dump.html…

iphone mac地址是否随机_iOS8随机MAC地址功能:需要满足前提要求

苹果今年WWDC大会上透露过 iOS8 当中将具备一个连接 Wi-Fi 时随机生成 MAC 伪地址的功能,用来防范一些提供 Wi-Fi 的不法商家获取用户的隐私数据挪作它用。近日,一家名为 AirTight Networks 的移动安全技术研究公司发布了一份针对该功能的调查报告&#…

Kubernetes dashboard集成heapster

图形化展示度量指标的实现需要集成k8s的另外一个Addons组件: Heapster 。 Heapster原生支持K8s(v1.0.6及以后版本)和 CoreOS ,并且支持多种存储后端,比如: InfluxDB 、 ElasticSearch 、 Kafka 。 下载源包和images文件 下载地址h…

复习JavaFile类_递归_综合案例

复习File类_递归 主要内容 File类递归 第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作, 这里需要注意一点File不能用于对文件内容进行操作, 对文件内容进行操作需要使用FileInputStream与Fi…

ESP32 分区介绍

软件设计分区表 如上图是正常运行需要的分区,一个系统的正常运行是需要这么多分区的。 分区表,我们软件默认配置的分区表如下 # Espressif ESP32 Partition Table # Name, Type, SubType, Offset, Size, Flags nvs,data,nvs,0x9000,16K, otadata,data,…

python坦克大战_Life is short,you need Python——Python实现坦克大战(一)

先展示一下效果搓搓小手手,坦克大战即将开始……https://www.zhihu.com/video/1140743290784817152一、游戏引擎的安装安装方式有两种:1.pip安装 windows R --> cmd --> pip install pygame2.pycharm安装 File -->setting -->project -->…

【java设计模式】【行为模式Behavioral Pattern】迭代器模式Iterator Pattern

1 package com.tn.pattern;2 3 public class Client {4 public static void main(String[] args) {5 Object[] objs{"飞","雪","连","天","射","白","鹿","笑","书",&…

复习Java字节流_字符流使用及案例

字节流_字符流 主要内容 IO流字节流字符流异常处理Properties 第一章 IO概述 1.1 什么是IO 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrls ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频…

ESP32 coredump 分析

1. 上次写了一个 ESP32 入门,我想有必要再写这篇文章,这次主要是分析 coredump 的,这就像 Android 和 Linux 系统的死机分析,有意思,也有难度。我们写代码的时候,不可避免的会遇到一些 coredump 的问题&am…