zoukankan      html  css  js  c++  java
  • 快速排序

    快排的实现方式多种多样,给大家写一种容易理解的:分治+迭代,只需要三步:

    1. 在数列之中,选择一个元素作为”基准”(pivot),或者叫比较值。

    2. 数列中所有元素都和这个基准值进行比较,如果比基准值小就移到基准值的左边,如果比基准值大就移到基准值的右边

    3. 以基准值左右两边的子列作为新数列,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

    '''
    快速排序
    '''
    def quick_sort(arr):
        if len(arr) < 2:
            return arr
        mid = arr[len(arr) // 2]
        left,right = [],[]
        arr.remove(mid)
        for item in arr:
            if item >= mid:
                right.append(item)
            else:
                left.append(item)
        return quick_sort(left) + [mid] + quick_sort(right)
    1. 稳定性:快排是一种不稳定排序,比如基准值的前后都存在与基准值相同的元素,那么相同值就会被放在一边,这样就打乱了之前的相对顺序

    2. 比较性:因为排序时元素之间需要比较,所以是比较排序

    3. 时间复杂度:快排的时间复杂度为O(nlogn)

    4. 空间复杂度:排序时需要另外申请空间,并且随着数列规模增大而增大,其复杂度为:O(nlogn)

    5. 归并排序与快排 :归并排序与快排两种排序思想都是分而治之,但是它们分解和合并的策略不一样:归并是从中间直接将数列分成两个,而快排是比较后将小的放左边大的放右边,所以在合并的时候归并排序还是需要将两个数列重新再次排序,而快排则是直接合并不再需要排序,所以快排比归并排序更高效一些,可以从示意图中比较二者之间的区别。

    如何优化快排:

    对大规模数据集进行快排,当分区的规模达到一定小时改用插入排序,插入排序在小数据规模时排序性能较好

  • 相关阅读:
    存储类&作用域&生命周期&链接属性
    关于mysql数据库的备份和还原
    Centos 7下mysql的安装与配置
    基于Apache+php+mysql的许愿墙网站的搭建
    关于php留言本网站的搭建
    linux下面桌面的安装
    时间同步ntp服务的安装与配置
    通过挂载系统光盘搭建本地yum仓库的方法
    linux系统root用户忘记密码的重置方法
    linux系统的初化始配置
  • 原文地址:https://www.cnblogs.com/wdz1226/p/10627547.html
Copyright © 2011-2022 走看看