📜  DAA-快速排序(1)

📅  最后修改于: 2023-12-03 14:40:35.925000             🧑  作者: Mango

DAA-快速排序

快速排序是一种高效的排序算法,它的时间复杂度为O(nlogn),比其他基于比较的排序算法(如冒泡排序和选择排序)更快。它的基本思想是通过将一个大的待排序序列分成两部分,分别排序,然后将它们合并在一起。

算法流程

快速排序的核心是分治法。它的具体流程如下:

  1. 选取一个基准元素pivot(一般选择第一个元素或者最后一个元素)。
  2. 将小于pivot的元素放在左侧,大于等于pivot的元素放在右侧。
  3. 对左侧和右侧的元素分别递归地进行快速排序。

实现上可以采用两种方式:递归和迭代。

递归

递归是一种直观的实现方式。代码如下:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[0]
    left = [x for x in arr[1:] if x < pivot]
    right = [x for x in arr[1:] if x >= pivot]
    return quick_sort(left) + [pivot] + quick_sort(right)
迭代

迭代是一种非递归的实现方式。代码如下:

def quick_sort(arr):
    stack = [(0, len(arr) - 1)]
    while stack:
        start, end = stack.pop()
        if start >= end:
            continue
        pivot = arr[start]
        i = start
        j = end
        while i < j:
            while i < j and arr[j] >= pivot:
                j -= 1
            arr[i] = arr[j]
            while i < j and arr[i] < pivot:
                i += 1
            arr[j] = arr[i]
        arr[i] = pivot
        stack.append((start, i - 1))
        stack.append((i + 1, end))
    return arr
性能分析

快速排序的时间复杂度为O(nlogn),最坏情况下为O(n^2)。当序列中的元素已经有序或者大部分元素都相同时,快速排序的效率会变得很低。

快速排序是一种不稳定的排序算法。如果在交换元素时不小心相同元素的顺序可能会发生改变。然而,快速排序的优势在于它在平均情况下比其他基于比较的排序算法都快。