zoukankan      html  css  js  c++  java
  • 排序算法:快速排序解析及Python实现

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

    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实现

    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)  # 递归
  • 相关阅读:
    Win7系统安装Centos7.0双系统(二)
    vue动态加载图片失效
    vuex store更新了数据,但未触发getters
    js获取图片信息
    http请求204
    IOS 伪类:active失效
    js下载blob的形式
    URL的 ? 和 # (hash),如何将参数保存在URL中,用于刷新获取之前的变量?
    vue中修改数组,dom未更新的问题
    vue中使用qrcode,遇到两次渲染的问题
  • 原文地址:https://www.cnblogs.com/wkang/p/9574948.html
Copyright © 2011-2022 走看看