我正在撰寫一個 quick_sort 演算法代碼。這是我所知的代碼,它適用于大多數陣列,但它不適用于 [5, 3, 9, 8, 6] 并吐出IndexError: list index out of range
def quick_sort_array(A):
return quick_sort(A, 0, len(A)-1)
def quick_sort(A, l, r):
if l < r:
pivot = A[l]
left = l 1
right = r
while left <= right:
while A[left] <= pivot:
left = 1
while A[right] >= pivot and left <= right:
right -= 1
if left <= right:
tmp = A[left]
A[left] = A[right]
A[right] = tmp
A[l] = A[right]
A[right] = pivot
quick_sort(A, l, right-1)
quick_sort(A, right 1, r)
你能幫我理解這個嗎?謝謝
錯誤資訊:
![Python中的快速排序實作[特定輸入崩潰]](https://img.uj5u.com/2022/03/29/3fe49cb8e05943bf8d54aaf9c8ec55c6.png)
uj5u.com熱心網友回復:
當樞軸是您正在磁區的串列部分的開頭和串列結尾之間的最大元素時,您的快速排序的磁區步驟的實作將失敗。增加的while回圈left可以繼續進行,直到它跑出串列的末尾。
要解決此問題,您需要停止第一個內部回圈運行過去right,就像您已經阻止right運行太遠過去一樣left。我還沒有驗證你想要什么邊界條件,但是從第二個內部回圈復制一個可能會起作用:
while A[left] <= pivot and left <= right:
left = 1
while A[right] >= pivot and left <= right:
right -= 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/451563.html
