美文网首页
快速排序(python实现)

快速排序(python实现)

作者: 远行_2a22 | 来源:发表于2020-02-04 19:59 被阅读0次

快速排序是由C.R.A.Hoare(东尼·霍尔)所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。

快速排序是处理大数据最快的排序算法之一了。虽然 Worst Case 的时间复杂度达到了 O(n²),但是在大多数情况下都比平均时间复杂度为 O(n logn) 的排序算法表现要更好, 原因是:

快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。

快排算法步骤

快速排序流程:

  1. 从数列中挑出一个基准值。
  2. 将所有比基准值小的摆放在基准前面,所有比基准值大的摆在基准的后面(相同的数可以到任一边);在这个分区退出之后,该基准就处于数列的中间位置。
  3. 递归地把"基准值前面的子数列"和"基准值后面的子数列"进行排序。
# -*- coding:utf-8 -*-

def fast_sort(arr, left, right):
    if left < right:
        i = left
        j = right
        x = arr[i]  # 基准选取左边界,可以优化

        while i < j:

            # 从右向左找第一个小于x的数
            while i < j and arr[j] >= x:
                j -= 1
            if i < j:
                arr[i] = arr[j]
                i += 1

            # 从左向右找第一个大于等于x的数
            while i < j and arr[i] <= x:
                i += 1
            if i < j:
                arr[j] = arr[i]
                j -= 1

        arr[i] = x
        # 递归调用, 基准左边都比基准小,基准右边都比基准大
        fast_sort(arr, left, i-1)
        fast_sort(arr, i + 1, right)
    return array

if __name__ == '__main__':
    array = [20, 40, 60, 10, 20, 50]
    print fast_sort(array, 0, len(array)-1)

实例图
快排示意
  • 快速排序还有很多改进版本,如随机选择基准数,区间内数据较少时直接用另的方法排序以减小递归深度。

快速排序复杂度

1.时间复杂度:

  • 平均时间复杂度:O(nlog(n))
  • 最大时间复杂度:O(n^2)
  • 最小时间复杂度:O(nlog(n))
  1. 空间复杂度:O(1)
  2. 稳定性:不稳定
image.png

参考

相关文章

  • 快速排序的Python实现

    目录 快速排序的介绍 快速排序的Python实现 快速排序的介绍 快速排序(quick sort)的采用了分治的策...

  • 排序

    排序 快速排序 归并排序 计数排序 Python实现 理解 详解 稳定:如果a原本在b前面,而a=b,排序之后a仍...

  • 七大排序算法的 Python

    本文用Python实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 1、插...

  • 八大排序算法的 Python 实现(转)

    本文用Python实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 1、插...

  • Python实现程序员必备之排序算法汇总

    本文用Python实现了快速排序、插入排序、希尔排序、归并排序、堆排序、选择排序、冒泡排序共7种排序算法。 一、快...

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

  • Python 实现七大排序算法

    本文用 Python 实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序。 先整体看一下...

  • 快速排序算法的实现( Golang 和 Python )

    Python 中一行代码搞定快排 Python 快速排序 Golang 快速排序

  • 快速排序的Python 简单实现

    快速排序的Python 简单实现[https://www.cnblogs.com/clemente/p/11168...

  • python实现快速排序(QuickSort)

    python实现【快速排序】(QuickSort) 算法原理及介绍 快速排序的基本思想:通过选择一个关键字,一趟排...

网友评论

      本文标题:快速排序(python实现)

      本文链接:https://www.haomeiwen.com/subject/vcsdxhtx.html