我對Quicksort算法有下面的python代碼。該代碼工作正常,直到所有元素的權利的樞紐大於樞紐,在這種情況下,這些仍然未排序。Quicksort的Python實現無法對整個數組進行排序
理論上的代碼應該在陣列中的所有元素進行排序,但在這個階段,我不知道我失蹤
def swap(array, i, j):
temp = array[i]
array[i] = array[j]
array[j] = temp
def choosePivotFirstElement(array, left, right):
return left
def partition(array, pivotIndex, left, right):
swap(array, pivotIndex, left) #put pivot to the left
pivot = array[left]
i = left + 1
for j in range(left+1, right+1):
if (array[j] < pivot):
swap(array, i, j)
i = i + 1
swap(array, left, i-1) #put pivot back to its place
return (i-1) #return the position of the pivot
def qsort(array, left, right):
if ((right - left) < 2):
return
pivotIndex = choosePivotFirstElement(array, left, right)
split = partition(array, pivotIndex, left, right)
qsort(array, left, split)
qsort(array, split + 1, right)
return array
myList = [7,2,5,1,29,6,4,19,11]
sorted = qsort(myList,0,len(myList)-1)
print sorted
,應返回
[1,2,4,5 ,6,7,11,19,29]
而是返回
[1,2,4,5,6,7,29,19,11]
我是python的新手,所以我可能會犯一個相當明顯的錯誤。
'qsort'沒有返回任何東西......它似乎在原地排序。你的'print'語句是不是顯示'None'? – Cameron
你確定這個'((右 - 左)<2)'條件嗎?乍一看它看起來會阻止你的排序工作,比如'qsort([1,0],0,1)' – njzk2
另外,在python中的交換可以通過'x [i],x [j] = x [j],x [i]'其中'x'是你的列表。 –