好程式設計師Python學習路線分享實現快速排序演算法

好程式設計師IT發表於2019-09-10

  好程式設計師Python學習路線分享 實現快速排序演算法快速排序演算法是一種基於交換的高效的排序演算法,由C.R.A.Hoare 1962 年提出,是一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 (Divide and conquer algorithm)

 

分治法的基本思想

 

將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。

 

快速排序的基本思想

 

先找到一個基準點(一般指陣列的中部),然後陣列被該基準點分為兩部分,依次與該基準點資料比較,如果比它小,放左邊;反之,放右邊。

左右分別用一個空陣列去儲存比較後的資料。

最後遞迴執行上述操作,直到陣列長度  <= 1;

 

程式碼實現

 

```python

def quick_sort(lists, left, right):

    ''' 快速排序 '''

    #  跳出遞迴判斷

    if left >= right:

        return lists

 

    #  選擇參考點,該調整範圍的第 1 個值

    key = lists[left]

    low = left  

    high = right

 

    #  迴圈判斷直到遍歷全部

    while left < right:

        #  從右邊開始查詢大於參考點的值

        while left < right and lists[right] >= key:

            right -= 1

        lists[left] = lists[right]  #  這個位置的值先挪到左邊

 

        #  從左邊開始查詢小於參考點的值

        while left < right and lists[left] <= key:

            left += 1

        lists[right] = lists[left]  #  這個位置的值挪到右邊

 

    #  寫回改成的值

    lists[left] = key

 

    #  遞迴,並返回結果

    quick_sort(lists, low, left - 1)    #  遞迴左邊部分

    quick_sort(lists, left + 1, high)   #  遞迴右邊部分

    return lists

 

numbers = [4, 0, 7, 9, 2, 8, 1, 3, 6, 5]

quick_sort(numbers 0 len(numbers)-1)

assert numbers == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

```

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2656638/,如需轉載,請註明出處,否則將追究法律責任。

相關文章