算法学习笔记五一快速排序

发布时间 2023-12-23 22:40:59作者: Monster_bird

什么是快速排序

快速排序(Quicksort)是一种常用的排序算法,它的基本思想是通过分治的策略将一个大问题划分为多个小问题来解决。它的平均时间复杂度为O(nlogn),最坏情况(有序情况)为O(n^2)。是一种高效的排序算法。

算法思想

  1. 选择一个基准元素(pivot),可以是数组中的任意一个元素。通常情况下,可以选择第一个元素、最后一个元素或者随机选择。
  2. 将数组划分为两个子数组:小于等于基准元素的元素放在基准元素的左边,大于基准元素的元素放在右边。这个过程称为分区(partition)操作。
  3. 对两个子数组分别递归地应用快速排序算法,直到子数组的大小为0或1,此时子数组已经有序。
  4. 合并排序后的子数组,即得到最终的排序结果。

示例代码

def partition(list, left, right):
    temp = list[left]
    while left < right:
        while list[right] > temp and left < right:  # 先遍历mid右边的数组,找到一个比temp小的数
            right -= 1
        list[left] = list[right]
        while list[left] < temp and left < right:  # 再遍历mid左边的数组,找到一个比temp大的数
            left += 1
        list[right] = list[left]
    list[left] = temp
    return left  # 结束循环时,left=right


def quick_sort(list, left, right):
    if left < right:
        mid = partition(list, left, right)
        quick_sort(list, left, mid - 1)
        quick_sort(list, mid + 1, right)

下面介绍一种python实现比较方便的写法:

def quick_sort(list):
    if len(list) <= 1: # 当递归的数组只有一个时
        return list
    else:
        pivot = list[0]
        less = [x for x in list[1:] if x <= pivot]
        greater = [x for x in list[1:] if x > pivot]
        return quick(less) + [pivot] + quick(greater)