我可以正確運行我的代碼以按升序對陣列進行排序,但是當我嘗試進行降序時,我總是讓索引超出范圍。我一直在嘗試除錯它并運行我的 for 回圈來找出問題所在,但我無處可去。歡迎任何建議,謝謝。
def merge_sort(arr, beg, end):
if beg < end:
mid = (beg end) // 2
merge_sort(arr, beg, mid)
merge_sort(arr, mid 1, end)
merge(arr, beg, mid, end)
def merge(A, beg, mid, end):
n1 = mid - beg 1
n2 = end - mid
L = [0] * (n1 1)
R = [0] * (n2 1)
for i in range(0, n1):
L[i] = A[beg i]
for j in range(0, n2):
R[j] = A[mid 1 j]
L[n1] = float('inf')
R[n2] = float('inf')
i = 0
j = 0
for k in range(beg, end 1):
if L[i] <= R[j]:
A[k] = L[i]
i = 1
else:
A[k] = R[j]
j = 1
return A
myList = [26,54,93,17,77,31,44,55,20]
merge_sort(myList, 0, len(myList) - 1)
print(myList)
我的這個 MergeSort 的輸出是:[17, 20, 26, 31, 44, 54, 55, 77,93] 這是按升序排列的,我希望我的輸出是相反的: [93, 77, 55, 54, 44、31、26、20、17]
對于這些代碼行:
for k in range(beg, end 1):
if L[i] <= R[j]:
A[k] = L[i]
i = 1
我確實用 > 切換了 <= ,但出現索引范圍錯誤。
uj5u.com熱心網友回復:
對于降序,標記值需要是最大負值:
L[n1] = -float('inf')
R[n2] = -float('inf')
為了穩定性(保持相同值的原始順序):
if L[i] >= R[j]:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/510111.html
標籤:Python算法排序
上一篇:使用python將兩條單獨的線最好地擬合到一組2D點
下一篇:在另一個字串中查找一個字串的出現
