python簡潔代碼實現快速排序

*快速排序 最優時間復雜度為nlogn,因為要完成n個嵌套調用,,但比冒泡排序要快
python實現邏輯過程是這樣得。
1.設置兩個游標 left跟right
2.設置基準值,網上有方案設置中間數為基準值,但計算比較麻煩,而且并不一定高效,這里設置列表最右的那個元素為基準值,
3.left游標 從左向右移動,當游標指向元素大于基準值時,停下,交換right游標指向的元素
4 同理 right右標向左移動
5 當左右游標相等時停止循環,賦值基準值給左游標指向的元素
6 對基準值左邊的元素遞歸,重復以上步驟,
7 設置條件退出遞歸。
下面是代碼實現

alist= [22,21,34,65,12,89,3,9,66]

def qucik_sort(alist,low, high):
    # 退出遞歸條件
    # left=right
    while low>high:
        return alist

    left = low
    right = high
    base_value = alist[right]

    while left < right:
        while left<right and alist[left] < base_value:
            left += 1
        # 跳出循環條件
        # alist[left]>=base_value
        alist[right]=alist[left]
        while right>left and alist[right]>base_value:
            right -= 1
        # 跳出循環條件
        # alist[right]<=base_value
        alist[left]=alist[right]
    # 把基準值賦值給游標停留的元素
    alist[right] = base_value
  # 繼續對游標左右的隊列遞歸快速排序
    qucik_sort(alist,low,left-1)
    qucik_sort(alist,left+1,len(alist)-1)
    print(alist)

if __name__ == '__main__':

    low = 0
    high = len(alist)-1
    qucik_sort(alist,low,high)

輸出結果為 [3, 9, 12, 21, 22, 34, 65, 66, 89]

簡潔的代碼 ,很pythonic.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、直接插入排序 直接插入排序(Insertion Sort)的基本思想是:每次將一個待排序的元素記錄,按其關鍵字...
    kevin16929閱讀 575評論 0 0
  • 前幾天在碼農網看到了一篇文章,關于講objective-c的幾種排序算法的圖形化操作方式,自己也寫了一份代碼溫習下...
    happyte閱讀 777評論 0 5
  • 最近幾天最想寫點東西。昨晚已經睡了,迷迷糊糊之前在想一些東西,越想越清楚,直接從床上爬起來寫下了這段感想。...
    君子獨善其身閱讀 481評論 2 3
  • 必做作業:第1課作業 修改 片段 一: 選自《堅持,一種可以養成的習慣》 【R:閱讀原文】 盡量找出不被侵犯的“圣...
    踏雪飛燕_5908閱讀 212評論 0 0