python實現快速排序

來源:互聯網
上載者:User

標籤:選擇   關係   工作內容   代碼實現   並且   list   c++   理解   時間複雜度   

最近在公司的工作內容發生變化,短期內工作量變少了,這也讓我有時間整理一些日常學習和工作中的收穫或思路。所以申請了部落格,並打算持續更新。

 

快速排序採用了分治的思想,基本思想是選取數組中一個數為基準數(一般選擇數組中的第一個數),一次排序過程中,將比基準數小的都放在它左側,比基準數大的放在它的右側。經過這次排序後得到兩個數組和一個基準數,數組1中全部元素小於基準數,數組2中的全部元素大於基準數,然後對數組1,2分別進行同樣的排序(遞迴),最後直到剩下一個數字。

 

下面給出python代碼實現

 1 def partiton(li, low, high): 2     key = li[low] 3     while low < high: 4         while low < high and li[high] >= key: 5             high -= 1 6         if low < high: 7             li[low], li[high] = li[high], li[low] 8  9         while low < high and li[low] < key:10             low += 111         if low < high:12             li[high], li[low] = li[low], li[high]13 14     return low15 16 def quickSort(li, low, high):17     if low >= high:18         return19     center = partiton(li, low, high)20     quickSort(li, low, center - 1)21     quickSort(li, center + 1, high)

關於實現:

快速排序的實現有很多種,這裡我給出了比較常規並且好理解的一種.低位,高位兩個指標從左右兩側相向遍曆list。當高位指標發現了小於基準數的元素時,便停止移動,此時開始移動低位指標,當低位指標發現了大於基準數的元素時,便停止移動,兩指標交換元素值,如此迴圈,直至兩指標相遇。

 

關於時間複雜度:

快速排序具體的已耗用時間和原始列表本身的排序狀態有很大關係,理論上快排的時間複雜度是(nlogn),但是如果運氣不好糟糕,比如說初始列表是[5,4,3,2,1],那麼根據上面的方法實現過程是什麼樣的呢,實現過程如下:

[5,4,3,2,1] -> [4,3,2,1,5] -> [3,2,1,4,5] -> [2,1,3,4,5] -> [1,2,3,4,5]

這樣的排序實現過程很眼熟,跟最簡單的冒泡排序的實現過程是完全相同的,所以說快排的最壞情況是冒泡排序,時間複雜度是(n2)

 

以上的實現較為通用,如果不使用python,而使用c++,java等其它程式設計語言實現,代碼結構不會相差太多。我想到了一種比較貼合python文法特點,並且能較好的展示快排思想的實現方法。不同點是該方法時間在層遞迴中需要遍曆2次列表,即複雜度為(2nlogn)

def qsort(lst):    if not lst:        return []    return qsort([i for i in lst[1:] if i < lst[0]]) + [lst[0]] + qsort([i for i in lst[1:] if i > lst[0]])

 

python實現快速排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.