我想实现与第三版 CLRS 的问题 2-4 相关的 python 代码。问题是第 41 页中的“查找列表中的Inversion的数量”,我编写了以下代码:
mainCounter = 0
def merg(array,counter):
if len(array)==1:
return array
left = array[:len(array)/2]
right = array[len(array)/2:]
return combine(merg(left, counter), merg(right, counter), counter)
def combine(array1, array2, counter):
global mainCounter
result = []
pointer1 = 0
pointer2 = 0
while(pointer1 != len(array1) and pointer2 != len(array2)):
if array1[pointer1] < array2[pointer2]:
result.append(array1[pointer1])
pointer1 += 1
elif array1[pointer1] == array2[pointer2]:
result.append(array1[pointer1])
pointer1 += 1
else:
result.append(array2[pointer2])
counter += (len(array1)-pointer1)
pointer2 += 1
if pointer1 == len(array1):
for i in array2[pointer2:]:
result.append(i)
else:
for i in array1[pointer1:]:
result.append(i)
mainCounter+=counter
return result
问题是当我在 python 控制台中导入这个模块时 mainCounter 没有改变,但这必须改变!!:
Python 2.7.3 (default, Aug 1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from mergSort import *
>>> merg([1,4,2,3],0)
0
0
2
[1, 2, 3, 4]
>>> merg([1,4,2,3],0)
2
2
4
[1, 2, 3, 4]
>>> mainCounter
0
>>> merg([1,4,2,3],0)
4
4
6
[1, 2, 3, 4]
>>> merg([1,4,2,3],0)
6
6
8
[1, 2, 3, 4]
>>> merg([1,4,2,3],0)
8
8
10
[1, 2, 3, 4]
>>> mainCounter
0
每次我调用该merg
函数时,我都会得到不同的结果,但 mainCounter 并没有改变!我错在哪里?