9种排序算法---快速排序算法

        快速排序算法又称为分割交换法;其基本思路是:先在数据中找一个虚拟的中间值,按中间值将整个数列分为两部分。其中,小于中间值的数据放在左边,大于中间值的数据放在右边;再用同样的方法处理左右两边的数据,直到排序完成为止。

 具体代码如下:

def quick_sort(data):
    if len(data) <= 1:
        return data
    else:
        pivot = data[0]  # 选择第一个元素作为基准值
        less_than_pivot = [x for x in data[1:] if x <= pivot]  # 小于基准值的元素
        greater_than_pivot = [y for y in data[1:] if y > pivot]  # 大于基准值的元素
        return quick_sort(less_than_pivot) + [pivot] + quick_sort(greater_than_pivot)

print(quick_sort([14, 23, 12, 45, 78]))
# 输出 [12, 14, 23, 45, 78]

代码解释:

        (1)有这样一组数列,现在我们对其进行递增排序

 

         (2)取数列的第一个数做为虚拟中间值,将小于中间值的数据放在左边,大于中间值的数据放在右边

        (3)左边只有一个数,不需要排序;右边取23为基准值,将小于中间值的数据放在左边(这个数列里面没有比23小的所以为NaN(空)),大于中间值的数据放在右边

        (4) 这里与第三步一样,右边取45为基准值,将小于中间值的数据放在左边(这个数列里面没有比23小的所以为NaN(空)),大于中间值的数据放在右边

        (5) 至此排序结束,递归算法会将数据依次弹出,得到排序结果

        (6)排序完成输出结果  

快速排序是一种非常高效的排序算法,适用于大数据量的排序。它的平均时间复杂度为O(n log n),最坏情况下的时间复杂度为O(n^2),但通过合理选择基准值,可以避免最坏情况的发生。

注意事项

  1. 基准值的选择:基准值的选择对快速排序的性能有很大影响。常见的做法是选择第一个元素、最后一个元素、中间元素或随机元素作为基准值。
  2. 递归深度:快速排序的递归深度为O(log n),但在最坏情况下可以达到O(n),这可能会导致栈溢出。可以通过尾递归优化或使用迭代代替递归来避免这个问题。
  3. 稳定性:快速排序不是稳定的排序算法,即相等的元素可能会改变它们的相对顺序。
平均时间复杂度最坏时间复杂度空间复杂度
快速排序算法O(n log n)O(n^2)O(log n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值