文章

快速排序(Python)

快速排序 Python 实现

快速排序(Python)

快速排序

排序算法平均时间复杂度空间复杂度稳定性
冒泡排序\(O(n^2)\)\(O(1)\)稳定
选择排序\(O(n^2)\)\(O(1)\)不稳定
插入排序\(O(n^2)\)\(O(1)\)稳定
希尔排序\(O(n\log^2 n)\)\(O(1)\)不稳定
归并排序\(O(n\log^2 n)\)\(O(n)\)稳定
快速排序\(O(n\log n)\)\(O(\log n)\)不稳定
堆排序\(O(n\log n)\)\(O(1)\)不稳定
计数排序\(O(n+k)\)\(O(k)\)稳定
基数排序\(O(n\times k)\) 稳定
桶排序\(O(n)\)\(O(m)\)稳定

算法思路

快速排序是一个采用分而治之思路的递归算法,对于一个待排序数列,快速排序会从数列中挑出一个元素,称为“基准”(pivot),将数列中所有比基准值小的元素移动到基准的前边,将所有比基准值大的元素移动到基准的后边,再递归的用该方法排序大于以及小于基准的子数列。

算法实现

话不多说直接上图!!!快速排序的分区过程示意图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def quick_sort(arr, start, end):
    if start >= end:
        return

    pivot = partition(arr, start, end)
    quick_sort(arr, start, pivot - 1)
    quick_sort(arr, pivot + 1, end)

def partition(arr, start, end):
    lt, pivot = start, end
    for i in range(start, end):
        if arr[i] < arr[pivot]:
            arr[lt], arr[i] = arr[i], arr[lt]
            lt += 1
    arr[lt], arr[end] = arr[end], arr[lt]
    return lt

图片及知识来源

«算法导论»第7章堆排序


本博客文章仅供博主学习交流,博主才疏学浅,语言表达能力有限,对知识的理解、编写代码能力都有很多不足,希望各路大神多多包涵,多加指点。

本文由作者按照 CC BY 4.0 进行授权