经典算法之快速排序(Quick Sort)-Python实现

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。

步骤为:

  1. 挑选基准值:从数列中挑出一个元素,称为“基准”(pivot),
  2. 分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成,
  3. 递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序

 

Python 代码实现

import random


def quick_sort(array, l, r):
    if l < r:
        q = partition(array, l, r)
        quick_sort(array, l, q - 1)
        quick_sort(array, q + 1, r)


def partition(array, l, r):
    x = array[r]
    i = l - 1
    for j in range(l, r):
        if array[j] < x:
            i += 1
            array[i], array[j] = array[j], array[i]

    array[i + 1], array[r] = array[r], array[i + 1]
    return i + 1


if __name__ == '__main__':
    # arr = [random.randint(0, 100) for _ in range(10)]
    arr = [56, 21, 75, 93, 39, 55, 34, 42, 81, 30]
    print("origin", arr)
    quick_sort(arr, 0, len(arr) - 1)
    print("result", arr)

  

posted @ 2021-03-16 09:58  进击的pythoner  阅读(260)  评论(0编辑  收藏  举报