算法笔记4----快速排序

4.1

D&C的工作原理:(1)找出简单的基线条件

                           (2)确定如何缩小问题的规模,使其符合基线条件

D&C并非可用于解决问题的算法,而是一种解决问题的思路。

类似使用递归。

第一步找出基线条件,也就是最简单的值

第二步每次递归调用都必须离结果更近一点,这样给函数传递的数组一次比一次短,就达到了缩小问题规模的目的,大--->小

提示:编写涉及数组的递归函数时,基线条件通常是数组为空或只包含一个元素。

4.2快速排序

快速排序是一种常用的排序算法,比选择排序快得多。快速排序也使用了D&C

最简单的数组就是根本不需要排序的数组

使用D&C,因此需要将数组分解,直到满足基线条件。首先,从数组中选择一个元素,这个元素被称为基准值

接下来,找出比基准值小的元素以及比基准值大的元素,这被称为分区。现在有了:一个由所有小于基准值的数字组成的子数组,基准值,一个由所有大于基准值的数组组成的子数组。

然后只需要对两个子数组进行快速排序,再合并结果,就能得到一个有序数组。

def quicksort(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 quicksort(less) + [pivot] + quicksort(greater)

print(quicksort([12, 21, 33, 55]))



4.3再谈大O表示法

合并排序的排序算法,其运行时间为O(n log n)。

大O表示法通常不考虑常量(固定时间量),因为如果两种算法的大O运行时间不同,这种常量将无关紧要。

但有时候常量的影响可能很大,。快速查找的常量比合并查找小,因此它们的运行时间都为O(n log n),快速查找的速度将更快。

4.3.1平均情况和最糟情况

平均情况下快排的层数为O(log n),而每层需要的时间为O(n).所以算法所需的时间为O(n)*O(log n)=O(n log n)。这就是平均情况

最糟情况下,有O(n)层,运行时间为O(n2)

最佳情况也是平均情况。

4.4小结

D&C将问题逐步分解。使用D&C处理列表时,基线条件很可能是空数组或只包含一个元素的数组

实现快速排序时,请随机地选择用作基准值的元素。快速排序的平均时间为O(n log n)

大O表示法中的常量有时候事关重大,这就是快速排序比合并排序快的原因所在

比较简单查找和二分查找时,常量几乎无关紧要,因为列表很长时,O(log n)的速度比O(n)快得多


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值