04 快速排序

'''
快速排序
經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據
都要小,而後再按此方法對這兩部分數據分別進行快速排序,整個過程能夠遞歸進行,以此達到整個數據
變成有序序列
'''
import time
start = time.time()
def quick_sort(alist, start, end):
    # 遞歸的退出條件
    if start >= end:
        return
    # 選擇開頭第一個做爲中間數
    mid = alist[start]
    # low爲序列左邊的由左向右移動的遊標
    low = start
    # 反之
    high = end
    '''左右兩邊的指針都往中間移動,直到相遇'''
    while low < high:
        # 若是low 與high 未重合, high指向的元素不比基準元素小,則high向左移動
        while low < high and alist[high] >= mid:
            high -= 1
        # 將high指向的元素放到low位置上
        alist[low] = alist[high]
        while low < high and alist[low] < mid:
            low += 1

        alist[high] = alist[low]
    # 退出循環後,low與high重合,此時所指位置爲基準元素的正確位置
    # 將基準元素放到該位置
    alist[low] = mid

    # 對基準元素左邊的子序列進行快速排序
    quick_sort(alist, start, low-1)
    # 對基準的右邊的子序列進行快速排序
    quick_sort(alist, low+1, end)

if __name__ == '__main__':
    alist = [5,9,3,7,1,10,4,8,2,6]
    quick_sort(alist,0,len(alist)-1)
    print(alist)
    end = time.time()
    print(end-start)
相關文章
相關標籤/搜索