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),左閉右開算法

相關文章
相關標籤/搜索