前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >排序算法:快速排序解析及Python实现

排序算法:快速排序解析及Python实现

作者头像
Bo_hemian
发布2020-09-09 21:10:12
4990
发布2020-09-09 21:10:12
举报
文章被收录于专栏:machine_learningmachine_learning

关键词:分而治之、递归、计算速度、基准值

1. 什么是分而治之?

1.1 分而治之(divide and conquer)一种递归式方法

1.2 找出基线条件,这种条件必须尽可能简单

1.3 不断将问题分解为简单问题,直到问题满足极基线条件

2. 算法计算时间

2.1 最好情况:

假设数组的长度为0~7这8个数字,且乱序排序,并且每次取正中间的值作为基线值 basevalue 。那么可结合二分查找的思想可知递归调用 logn +1 次,即树深为 logn+1 ,如下图所示:

由于每次递归实际上都对n个元素进行了遍历判断,故算法复杂度为O(n*(logn +1)) = O(nlogn) 。

2.2 最糟情况:

数组升序排序,每次取第一个元素作为基线值 basevalue ,需要递归调用n次,每次递归实际上都对n个元素进行了遍历判断,故算法复杂度为O(n2) 。

2.3 平均情况:

最佳情况即平均情况,如果每次都随机选取数组中的一个元素作为基准值basevalue,那么快速排序的平均运行时间(算法复杂度)都为O(nlogn) 。

3. 快速排序的python实现

代码语言:javascript
复制
class solution(object):
    def quicksort(self, array):
        if len(array) < 2:
            return array
        basevalue = array[0]  # 基线条件
        left = [i for i in array[1:] if i <= basevalue]
        right = [j for j in array[1:] if j > basevalue]
        return self.quicksort(left) + [basevalue] + self.quicksort(right)  # 递归
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 什么是分而治之?
  • 2. 算法计算时间
    • 2.1 最好情况:
      • 2.2 最糟情况:
        • 2.3 平均情况:
        • 3. 快速排序的python实现
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档