我對合並工作排序使用遞歸的Python合併的錯誤。 我找不到我犯的錯誤,總是得到錯誤的答案。 的代碼如下:排序使用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]
我期望的最後第三行應爲「[1100] R [54 ,91]「之後回來。 這裏有什麼問題?我知道interactivePython.org中有一個代碼,但我想知道我在哪裏犯了邏輯錯誤。誰能幫我?一噸謝謝!
如果'LEN(的Xlist)> 1'是不正確的,功能不執行任何操作,因此它返回無。這是故意的嗎? –
你的代碼的後半部分並沒有真正進行合併排序。附加到'left'不是合併 - 它依靠你的清理代碼*低調地*按照正確的順序排列列表。你已經有效地實現了一個** shell排序**的僞裝合併排序。 –