Python之快速排序

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

相关文章
相关标签/搜索