python中的计数反转(用于大整数数组)

python中的计数反转(用于大整数数组),python,algorithm,inversion,Python,Algorithm,Inversion,我在Pyton中制作了一个计数反转程序,并使用python27进行同样的操作。我已经使用分治技术(合并排序技巧)实现了该算法。对于大小为uptill 100的输入阵列(这是我可以验证的最大值),我的程序运行良好。 现在我在一个大小分别为50000和100000的输入阵列上测试了我的程序,但始终无法得到正确的答案。我已将我的代码粘贴在下面,请指出任何可能的错误: f=open('forum.txt') a=[] s=1 for line in f:

我在Pyton中制作了一个计数反转程序,并使用python27进行同样的操作。我已经使用分治技术(合并排序技巧)实现了该算法。对于大小为uptill 100的输入阵列(这是我可以验证的最大值),我的程序运行良好。 现在我在一个大小分别为50000和100000的输入阵列上测试了我的程序,但始终无法得到正确的答案。我已将我的代码粘贴在下面,请指出任何可能的错误:

    f=open('forum.txt')
    a=[]
    s=1
    for line in f:
        a.append(line)





def CountInversion(IntegerArray):
_count=0
lc=0
rc=0
RightArray=[]
LeftArray=[]
if len(IntegerArray)>1:
        LeftArray,lc=CountInversion(IntegerArray[:len(IntegerArray)/2])
        RightArray,rc=CountInversion(IntegerArray[len(IntegerArray)/2:])
elif len(IntegerArray)==1:
    return IntegerArray,0
ResultArray=IntegerArray
i=0
l=len(ResultArray)
j,k=0,0
for i in range(0,l):
    if j<len(RightArray) and k<len(LeftArray):
        if RightArray[j]<LeftArray[k]:
            ResultArray[i]=RightArray[j]
            j += 1
            a=(len(LeftArray)-k)
            _count = _count + a    
        else:
            ResultArray[i]=LeftArray[k]
            k += 1
elif j<len(RightArray):
    ResultArray[i]=RightArray[j]
        j += 1
elif k<len(LeftArray):
        ResultArray[i]=LeftArray[k]
        k += 1          
return ResultArray,(_count+lc+rc)

arr,b=CountInversion(a)

print ('end of inversions')

print b
f=open('forum.txt')
a=[]
s=1
对于f中的行:
a、 追加(行)
def计数反转(整数阵列):
_计数=0
lc=0
rc=0
RightArray=[]
LeftArray=[]
如果len(IntegerArray)>1:
LeftArray,lc=CountInversion(IntegerArray[:len(IntegerArray)/2])
RightArray,rc=CountInversion(IntegerArray[len(IntegerArray)/2:]
elif len(整数数组)==1:
返回整数数组,0
结果数组=整数数组
i=0
l=len(结果光线)
j、 k=0,0
对于范围(0,l)内的i:

如果j您的第一个问题是缩进不一致。在一些行中,您使用制表符而不是空格,这是一个非常糟糕的主意。缩进在Python中非常重要,因此如果不小心,很容易出错

我认为你遇到的第二个问题是,你在比较字符串,而不是数字。Python非常乐意对字符串进行排序,但它将使用字典式orering,这在应用于编码为字符串的整数时可能会出人意料。例如,字符串
“11”
将在字符串
“2”
之前排序,因为它的第一个字符
1
在ASCII字符集中(以及在Unicode中)位于
2
之前


正如我在一篇评论中所问的,不清楚您是如何确定代码工作不正常的。可能仅仅解决我上面描述的问题就可以解决您所遇到的问题。如果他们没有,请解释你是如何确定你的结果无效的,我将尝试用进一步的建议更新这篇文章。

通过将字符串解析为int并填充几乎不可读的数组来解决问题,但是你可以通过一个小小的修改来实现合并排序(这可能是这段代码试图做的)。请发布适当缩进的代码-它实际上很重要。s/1,00000/100000/,所以我不允许。python脚本是这样的。输入文件也是非常感谢的,它工作了!!!我只是将字符串解析为int并填充数组。3天以来一直在努力,再次感谢!!通过添加一些示例代码,可以大大改进这个答案。