【发布时间】:2016-06-16 01:09:33
【问题描述】:
我正在使用递归 Python 进行合并排序。 我找不到我在哪里犯了错误并且总是得到错误的答案。 代码如下:
def mergeSort(xlist):
print ('Splitting',xlist, len(xlist))
if len(xlist)>1:
midpoint = len(xlist) // 2
left = xlist[:midpoint]
right = xlist[midpoint:]
print ('----------------------------')
mergeSort(left)
mergeSort(right)
print (left, 'r', right)
while len(right) >0:
left.append(right[0])
right.remove(right[0])
slot= len(left)-1
while slot >0:
if left[slot] < left[slot-1]: left[slot], left[slot-1] = left[slot-1], left[slot]
slot -= 1
print ('sorted',left, right,xlist)
return left
print('A',mergeSort([100,1,91,54]))
合并时,输出也显示错误,如:
Splitting [100, 1, 91, 54]
----------------------------
Splitting [100, 1] 2
----------------------------
Splitting [100] 1
Splitting [1] 1
[100] r [1]
sorted [1, 100] [] [100, 1]
Splitting [91, 54] 2
----------------------------
Splitting [91] 1
Splitting [54] 1
[91] r [54]
sorted [54, 91] [] [91, 54]
[100, 1] r [91, 54]
sorted [1, 54, 100, 91] [] [100, 1, 91, 54]
A [1, 54, 100, 91]
我希望返回后的最后第三行应该是“[1,100] r [54, 91]”。 这里有什么问题?我知道interactivePython.org 中有一段代码,但我想了解我在哪里犯了逻辑错误。谁能帮我?非常感谢!
【问题讨论】:
-
如果
len(xlist)>1不为真,该函数什么也不做,因此它返回 None。这是故意的吗? -
您的代码的后半部分并没有真正进行合并排序。附加到
left不是合并 - 它依赖于您的清理代码以sloooowly 以正确的顺序排列列表。您已经以合并排序的名义有效地实现了 shell 排序。
标签: python sorting recursion merge