#!/usr/bin/python from sortCommon import swap #分區函數 def partition(dataArray, left, right): #把最後一個元素作爲基準 pivot = right #小於基準的子數組的最後一個元素的下標 tail = left - 1 for i in range(left, right): #把小於等於基準的元素放到前一子數組的末尾 if dataArray[i] <= dataArray[pivot]: tail+=1 swap(dataArray, tail, i) #把基準元素放到前一個子數組的最後邊,這樣就保證了剩下的子數組就是大於基準的子數組 swap(dataArray, tail+1, right) #返回基準的索引 return tail+1 #快排函數 def quickSort(dataArray, left, right): if left>=right: return pivotIndex = partition(dataArray, left, right) #遞歸調用 quickSort(dataArray, left, pivotIndex-1) quickSort(dataArray, pivotIndex+1, right) def sort(dataArray): quickSort(dataArray, 0, len(dataArray)-1)
這邊是使用遞歸實現快排算法,由於遞歸比較簡潔,但遞歸有一個比較嚴重的問題就是,若是數據量大會致使調用棧很是深,在java中最直接的後果就是棧 內存溢出,python不知道會有什麼後果,由於剛用python不久,有時間再試一下,而且嘗試把這個算法改爲迭代的實現html
參考連接:java