1. 程式人生 > >八大排序之快速排序

八大排序之快速排序

-name ui s task padding :focus relative size onos quest

快速排序

快速排序一輪排序的方式是找一個元素作為基準,然後將比它小的放到一邊,比它大的放到另一邊,對數組中所有元素進行這麽一輪操作之後,這個基準元素就已經安放到“正確”的位置了,然後遞歸這個基準元素的左邊和右邊,一直遞歸到某次分組只有一個元素,就完成了整個數組的排序。

python代碼如下:

# coding: utf-8
def quick_sort(arr, left, right):
    if left < right:
        index = partition(arr, left, right)
        quick_sort(arr, left, index)
        quick_sort(arr, index + 1, right)


def partition(arr, left, right):
    key = arr[left]
    while left < right:
        while arr[right] >= key and left < right:
            right -= 1
        if left < right:
            arr[left] = arr[right]
        while arr[left] <= key and left < right:
            left += 1
        if left < right:
            arr[right] = arr[left]
    arr[left] = key
    return left


if __name__ == "__main__":
    a = [4, 2, 6, 1, 6, 9, 0]
    print(a)
    quick_sort(a, 0, len(a)-1)
    print(a)

這段代碼是比較常見的遞歸實現,思路是先把數組最左邊的值作為key存起來,然後從右邊開始,將小於等於key的值賦給left,從左邊開始,將大於等於key的值賦給right,左右向中間趨近,直到left==right,將key回填回left==right這個坑(這時,key的位置已經是它最終的"正確位置",小夥伴們,想想這是為什麽), 然後返回left(也可以返回right,他倆是一樣的),外層函數再根據partiion返回的left(right), 遞歸左邊和右邊。

八大排序之快速排序