首页 > 编程语言 >快速排序算法

快速排序算法

时间:2024-11-30 11:32:18浏览次数:11  
标签:基准 元素 算法 数组 排序 快速 复杂度 指针

快速排序(Quick Sort)是由英国计算机科学家 Tony Hoare 在1960年提出的排序算法。它是一种基于分治法的排序算法,通常在平均情况下具有很高的性能,时间复杂度为 O(nlog⁡n)O(n \log n),尽管最坏情况下时间复杂度为 O(n2)O(n^2),但通过一些优化方法可以避免这种情况。

快速排序的基本思想:

  1. 选择基准(Pivot):从数组中选择一个元素作为基准,通常选择第一个元素、最后一个元素、随机选择或中位数。
  2. 划分操作:将数组重新排列,使得基准元素的左边部分所有元素都小于基准元素,右边部分所有元素都大于基准元素。经过这个步骤后,基准元素已经排好位置。
  3. 递归排序:分别对基准左边和右边的两个子数组递归地进行排序。

快速排序的步骤:

  1. 选择基准:从数组中选择一个基准元素。常见的选择方式有:

    • 选择第一个元素
    • 选择最后一个元素
    • 随机选择一个元素
    • 选择中间元素(或中位数)
  2. 划分过程(Partitioning)

    • 用两个指针(左指针i和右指针j)扫描数组,目的是将小于基准的元素放到基准的左侧,将大于基准的元素放到基准的右侧。
    • 一开始,左指针指向数组的第一个元素,右指针指向数组的最后一个元素。
    • 左指针从左向右移动,找到大于或等于基准的元素;右指针从右向左移动,找到小于或等于基准的元素。
    • 当左指针小于右指针时,交换这两个元素,继续移动指针,直到两个指针交错。
    • 最后,将基准元素放到其正确位置,使得基准元素的左侧所有元素都小于基准,右侧的元素都大于基准。
  3. 递归排序:将数组分为两个子数组,分别对左边的子数组和右边的子数组递归地进行快速排序。

快速排序的实现代码(Python示例):

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)

# 示例使用
arr = [10, 7, 8, 9, 1, 5]
sorted_arr = quick_sort(arr)
print("Sorted array:", sorted_arr)

复杂度分析:

  • 时间复杂度
    • 最好情况:当基准元素正好将数组分成两半时,时间复杂度为 O(nlog⁡n)O(n \log n)。
    • 平均情况:一般情况下,基准元素将数组分成大致相等的两部分,时间复杂度为 O(nlog⁡n)O(n \log n)。
    • 最坏情况:当每次选择的基准都是数组的最大或最小元素时,数组每次只分成一个元素和剩余的元素,时间复杂度会退化为 O(n2)O(n^2)。
  • 空间复杂度:快速排序是就地排序,不需要额外的空间。递归的深度会影响空间复杂度,最坏情况下递归深度为 O(n)O(n),因此最坏空间复杂度为 O(n)O(n),但平均情况下递归深度为 O(log⁡n)O(\log n),空间复杂度为 O(log⁡n)O(\log n)。

快速排序的优化:

  1. 选择更好的基准:最坏情况发生在选择最小值或最大值作为基准时,使用随机选择或三数取中法(选择第一个元素、最后一个元素和中间元素中的中位数作为基准)可以减少最坏情况的出现几率。
  2. 小数组使用插入排序:对于较小的子数组(例如长度小于10),快速排序的效率较低,可以考虑使用插入排序来优化。

总结:

快速排序是一种高效的排序算法,尤其适用于大规模数据的排序。通过合理选择基准和优化递归,可以避免最坏情况并保持其良好的平均性能。在很多实际应用中,快速排序被广泛使用。

标签:基准,元素,算法,数组,排序,快速,复杂度,指针
From: https://blog.csdn.net/a15799652947/article/details/144151934

相关文章