快速排序仍是比較簡單的,話很少說,先貼Python代碼:python
class QuickSort: arrInfo = [] def __init__(self): self.initArr() def initArr(self): self.arrInfo = [4, 12, 32, 58, 87, 2, 54, 34, 76, 36] def randomPartition(self,left,right): randomIndex= right tmp = self.arrInfo[right] self.arrInfo[right] = self.arrInfo[randomIndex] self.arrInfo[randomIndex] = tmp def partition(self,left,right): self.randomPartition(left,right) refIndex = right refValue = self.arrInfo[refIndex] i = left - 1 for j in range(left,right): if self.arrInfo[j] <= refValue: i += 1 tmp = self.arrInfo[j] self.arrInfo[j] = self.arrInfo[i] self.arrInfo[i] = tmp tmp = self.arrInfo[i+1] self.arrInfo[i+1] = self.arrInfo[right] self.arrInfo[right] = tmp return i+1 def quickSort(self,left,right): if left<right: pIndex = self.partition(left,right) print self.arrInfo self.quickSort(left,pIndex-1) self.quickSort(pIndex+1,right) def printResult(self): print self.arrInfo self.quickSort(0,len(self.arrInfo)-1) print self.arrInfo QuickSort().printResult()
快排的思路,就是將要排序的數組分割成兩個數組,而後再對每一個數組進行快速排序,注意索引的值。這裏主要講講快排中的分割,分割就是選取一個參考值,將原數組分割成兩個新數組,其中一個數組裏面的全部值小於或者等於參考值,另一個數組裏面的全部值都會大於參考值,爲了考慮算法的效率,通常建議採用一個隨機選取參考值(不過事例中的隨機選取徒有虛名,由於只選擇原數組的最後一個值做爲參照,randomIndex= right),更多的細節能夠去代碼中體會,必定要注意索引的問題,range(left,right)的取值範圍爲:[left,right),左閉右開算法