對此很困惑,因爲我已經驗證了足夠小的測試用例正確的邏輯輸出(N = 20)。我嘗試做N = 10,000個數字,程序只是掛起,我不明白爲什麼......我已經儘可能簡單地實現了算法。Python中的QuickSort - 程序掛起以獲取更大的輸入大小?
此外,呼籲我的ňsorted(data)
= 10K名單似乎幾乎立即工作。所以我相信我的算法會陷入某個地方。
下面是代碼:
def QuickSort(array):
qsort(array, 0, len(array))
def qsort(arr, left, right):
if ((right - left) < 2):
return
pivotIndex = choosePivot0(arr, left, right)
newPivotIndex = partition(arr, pivotIndex, left, right)
qsort(arr, 0, newPivotIndex)
qsort(arr, newPivotIndex + 1, right)
def partition(arr, pivotIndex, left, right):
swap(arr, pivotIndex, left)
pivot = arr[left]
i = left + 1
for j in range(left+1, right):
if (arr[j] < pivot):
swap(arr, i, j)
i = i + 1
swap(arr, left, i-1) #put pivot back where it belongs
#cobj.count = cobj.count + (right - left - 1) #add m-1 the #of comparisons
return (i-1) #give back where the pivot resides
def swap(array, i, j):
temp = array[i]
array[i] = array[j]
array[j] = temp
def choosePivot0(array, left, right):
return randint(left, right-1) #random
所以我很迷失,爲什麼這可能會發生。謝謝你的幫助。
代碼多久才進行排序10K的數據?我實現一個更簡單的qsort和'sys.setrecursionlimit(2 ** 30)',大約需要20〜30秒,以進行排序'[2,3,5] * 10000',一個30k的數據。 – xiaowl 2012-07-28 07:28:49