Python 快速排序演算法指南

探索 Python 中的快速排序演算法。在此交互式编码示例中学习主元选择、分区和递归。

在編輯器中嘗試

概述

快速排序是一種極為快速且廣泛使用的排序演算法。與合併排序一樣,它採用分而治之的方法。然而,快速排序对元素进行“就地”排序,从而提高内存效率。

该算法的工作原理是从列表中选择一个“枢轴”元素。然後,它將其他元素劃分為兩個子數組:小於主元的子數組和大於主元的子數組。该过程递归地应用于子数组。

Although Quicksort has a worst-case complexity of O(n²), its average-case runtime is O(n log n), and it typically outperforms merge sort in practice due to lower cache misses and zero temphead of creating tempyy .

程式碼和執行輸出

一个简洁的递归快速排序脚本,使用列表推导来实现高可读性。

def quicksort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[len(arr) // 2]
        left = [x for x in arr if x < pivot]
        middle = [x for x in arr if x == pivot]
        right = [x for x in arr if x > pivot]
        return quicksort(left) + middle + quicksort(right)

# Test list
data = [12, 4, 5, 6, 7, 3, 1, 15]
print("Original List:", data)
sorted_data = quicksort(data)
print("Sorted List:  ", sorted_data)
端子輸出
Original List: [12, 4, 5, 6, 7, 3, 1, 15]
Sorted List:   [1, 3, 4, 5, 6, 7, 12, 15]

逐步實施

  • 内存占用必须保持在最低限度的系统排序例程
  • 標準語言庫框架中的通用排序
  • 分治力學與遞歸分而治之學術教學

常見問題解答

我們如何避免快速排序中 O(n²) 的最壞情況複雜度?

最坏的情况发生在所选主元重复为最小或最大元素时。为了缓解这种情况,开发人员使用选择随机主元或“三中位数”值等策略。

快速排序穩定嗎?

不,標準快速排序是不穩定的。在分區期間,元素在長範圍內交換,這可能會改變重複元素的相對順序。

相關主題