我在Python中使用合并排序的实现,当要排序的列表中有超过512个元素时,它会失败。
相关代码如下:
def mergeSort(oldList):
if len(oldList) > 1:
list1 = mergeSort(oldList[:len(oldList)/2])
list2 = mergeSort(oldList[len(oldList)/2:])
newList = merge(list1, list2)
return newList
else:
return oldList
def merge(list1, list2):
newList = []
i = 0
j = 0
while(len(list1) > i or len(list2) > j):
print i, j
if len(list1) is i:
newList.append(list2[j])
j = j + 1
elif len(list2) is j:
newList.append(list1[i])
i = i + 1
elif list1[i] > list2[j]:
newList.append(list2[j])
j = j + 1
else:
newList.append(list1[i])
i = i + 1
return newList
unsortedList = [ randint(0,100) for i in range(513) ]
mergeSortedList = mergeSort(unsortedList)
当我将最后一行中的513更改为任何较小的整数时,代码按预期工作。从513开始,我收到以下错误:
文件“./sortcomparison.py”,第129行,合并
elif list1[i] > list2[j]:
IndexError:列表索引超出范围
答案 0 :(得分:0)
要查看代码失败的位置,您可以在合并函数中的try except
块周围添加if else
块。
要解决错误,请在is
功能中将==
替换为merge
。
is
用于比较两个变量是否引用同一个对象,==
用于检查相等性。
有关此here
的更多信息