快速排序仍是比较简单的,话很少说,先贴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),左闭右开算法