快速排序

点击蓝字“莫名Coder”关注我哟

加个“星标”,每日良时,好文必达!

  快速排序

快速排序是一种常用的排序算法,比选择排序要快得多。

下面来使用快排对数组进行排序。对于排序算法来说,最简单的数组就是不需要排序的数组。因此基线条件为数组我诶空或只包含一个元素,在这种情况下,只需要原样返回数组----根本不需要排序。

def array_sort(list):
    if len(list) < 2:
        rerurn list

对包含两个元素的数组进行排序很容易,检查第一个元素是否比第二个小,如果不是,则交换位置即可。那三个以上呢?

快速排序工作原理:首先,从数组中选择一个元素,这个元素被称为基准值;稍后我们暂时将数组的第一个元素作为基准值;接下来找出比基准值小的元素以及比基准值大的元素。

例1:现有一个所有小于基准值的数字组成的子数组,基准值,一个由所有大于基准值的数字的子数组

案例1中,我们对数组进行了分区,得到的两个子数组都是无序的,但是如果这两个数组是有序进行排序非常容易。

如果子数组是有序的,左边的数组+基准值+右边的数组,结果就是一个有序数组。

但是数组无序如何操作?

  • 选择基准值

  • 将数组分为两个子数组,小于基准值组成的子数组和大于基准值组成的子数组

  • 对两个子数组进行排序

假设现在有一个五个元素的数组?

list_num = [3, 5, 2, 1, 4]
  1. 假设选择的基准值是1,分区为:[ ][3, 5, 2, 4]

  2. 假设选择的基准值是2,分区为:[1, ][3, 5, 4]

  3. 假设选择的基准值是3,分区为:[2, 1][5, 4]

  4. 假设选择的基准值是4,分区为:[3, 2, 1][5]

  5. 假设选择的基准值是3,分区为:[3, 2, 1, 4][]

注意:这些子数组包含的元素个数都在0~4之间,而你已经知道如何选择进行排序,因此不管选择任何基准值,你都可以划分两个子数组进行递归排序。

假如:你使用3用于基准值,可以对得到的数组进行排序。

将任何元素作为基准值都可以,同理你可以对其他长度的数组进行排序,以次类推。

快速排序代码实现:

def quick_list_sort(array):
    # 基线条件
    if len(array) < 2:
        return array
    else:
        # 基准值
        pivot = array[0] 
        less = [i for i in array[1:] if i <= pivot]
        greater = [i for i in array[1:] if i > pivot]
        return quick_list_sort(less) + [pivot] + quick_list_sort(greater)

array = [10, 4, 5, 1,89, 33]
print(quick_list_sort(array))
平均情况和最糟情况

快速排序的性能高度主要依赖于你选择的基准值,假设你总是将第一个元素用作于基准值,且处理的数组是有序的,由于快速排序不检查数组是否有序,因此他依旧对其进行排序。

注意:数组并没有分为两半,有一个数组始终为空,这导致 调用栈时间非常长。

现在将基准值作为一个中间值,则如下图示:

示例中,第二种明显是最优情况:栈的高度为O(log n),而每层的时间是O(n),这个算法的时间就是O(n log n)。这就是最优情况。最糟情况算法:O(n) * O(n) = O(n 2)。

知道吗?最佳情况也是平均情况,只要你每次都随机取一个数组元素作为基准值,这样的平均时间就是O(n log n)。快速排序是最快的排序算法之一。

注意:

实现快速排序算法的时候,请随机选择作为基准值的元素,快速排序算法平均运行时间是O(n log n)。

---END---

莫名Coder

关于 Python 都在这里

内容概要:《2024年中国城市低空经济发展指报告》由36氪研究院发布,指出低空经济作为新质生产力的代表,已成为中国经济新的增长点。报告从发展环境、资金投入、创新能力、基础支撑和发展成效五个维度构建了综合指评价体系,评估了全国重点城市的低空经济发展状况。北京和深圳在总指中名列前茅,分别以91.26和84.53的得分领先,展现出强的资金投入、创新能力和基础支撑。低空经济主要涉及无人机、eVTOL(电动垂直起降飞行器)和直升机等产品,广泛应用于农业、物流、交通、应急救援等领域。政策支持、市场需求和技术进步共同推动了低空经济的快速发展,预计到2026年市场规模将突破万亿元。 适用人群:对低空经济发展感兴趣的政策制定者、投资者、企业和研究人员。 使用场景及目标:①了解低空经济的定义、分类和发展驱动力;②掌握低空经济的主要应用场景和市场规模预测;③评估各城市在低空经济发展中的表现和潜力;④为政策制定、投资决策和企业发展提供参考依据。 其他说明:报告强调了政策监管、产业生态建设和区域融合错位的重要性,提出了加强法律法规建设、人才储备和基础设施建设等建议。低空经济正加速向网络化、智能化、规模化和集聚化方向发展,各地应找准自身比较优势,实现差异化发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值