Python簡單的實現快速排序


常見的快排排序:快排實現原理,可以更好理解快排思想

def quick_sort(alist, start, end):
    if start >= end:
        return
    mid = alist[start]
    left = start
    right = end
    # left與right未重合,就向中間移動
    while left < right:
        while left < right and alist[right] >= mid:
            right -= 1
        alist[left] = alist[right]
        while left < right and alist[left] < mid:
            left += 1  # a_list = [1, 12, 22, 34, 21, 4, 6, 8, 11, 54, 36, 7, 3, 0, 60, 62, 63]
        alist[right] = alist[left]
    # 從循環退出后,left與right相遇,即left==right
    alist[left] = mid
    # 對左邊部分執行快速排序
    quick_sort(alist, start, left-1)
    # 對右邊部分執行快速排序
    quick_sort(alist, left+1, end)


a_list = [1, 12, 22, 34, 21, 4, 6, 8, 11, 54, 36, 7, 3, 0, 60, 62, 63]
quick_sort(a_list, 0, len(a_list) - 1)
print(a_list)

輸出結果時,我發現這種方法直接改變了原有列表(使用的Python3.6)

使用列表推導式和快速排序的遞歸思想,實現快排:

def qucik_sort(alist):
    if len(alist) <= 1:
        return alist
    return qucik_sort([i for i in alist[1:] if i < alist[0]]) + alist[0:1] + qucik_sort([i for i in alist[1:] if i >= alist[0]])


ls = [22, 21, 34, 65, 12, 89, 3, 9, 66]
print(qucik_sort(ls))
print(ls)

理解快速排序思想之后,這個方法,使用的代碼非常少

而且該方法不改變原有的列表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM