我很努力地理解爲什麼我的QuickSort 返回正確的排序值,但結果數組未正確排序。QuickSort正在返回正確的值,但沒有排序
def qSort(array):
n = len(array)
if (n == 1 or n ==0):
return array
p_index = partition(array)
p_value = array[p_index]
return(qSort(array[0:p_index]) + [p_value] + qSort(array[p_index+1:n]))
def partition(array):
pivot = array[0]
i = 1
for j in xrange(1,len(array)):
print j
if array[j] < pivot:
tmp = array[j]
array[j] = array[i]
array[i]=tmp
i += 1
tmp = array[i-1]
array[i-1] = pivot
array[0] = tmp
return i-1
下面是一些示例輸出:
>>> q = [5,4,3,2,1]
>>> qSort(q)
[1, 2, 3, 4, 5]
>>> q
[1, 4, 3, 2, 5]
預先感謝您!
這似乎不工作'q = qSort(array [0:p_index])+ [p_value] + qSort(array [p_index + 1:n])' 'return(q)' – tonydx
You're還在制定新的名單。如果您需要在原地排序列表,您需要在代碼中對其進行更改,或執行'q = qSort(q)'。 –
@tonydx:您需要在IDLE中執行'q = qSort(q)'。 –