Num01–>定义

快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

Num02–>分析步骤:

步骤为:
1、从数列中挑出一个元素,称为”基准”(pivot)。

2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

Num03–>过程分析图


Num04–>Python代码实现

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : xiaokedef quick_sort(alist, start, end):"""快速排序"""if start >= end:return# 基准mid = alist[start]# 左边游标left = start# 右边游标right = endwhile left < right:while left < right and alist[right] >= mid:# 右边游标移动,左边游标不动right -= 1alist[left] = alist[right]while left < right and alist[left] < mid:# 左边游标移动,右边游标不动left += 1alist[right] = alist[left]# 退出循环后 left与right重合,即相等alist[left] = mid# 递归的方式排左边的序列quick_sort(alist, start, left - 1)# 递归的方式排右边的序列quick_sort(alist, left + 1, end)if __name__ == '__main__':alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]print("原列表为:%s" % alist)quick_sort(alist, 0, len(alist) - 1)print("新列表为:%s" % alist)# 结果如下:
# 原列表为:[54, 26, 93, 17, 77, 31, 44, 55, 20]
# 新列表为:[17, 20, 26, 31, 44, 54, 55, 77, 93]

Num05–>时间复杂度分析

最优时间复杂度:O(nlogn)
最坏时间复杂度:O(n2)
稳定性:不稳定

从一开始快速排序平均需要花费O(n log n)时间的描述并不明显。但是不难观察到的是分区运算,数组的元素都会在每次循环中走访过一次,使用O(n)的时间。在使用结合(concatenation)的版本中,这项运算也是O(n)。

在最好的情况,每次我们运行一次分区,我们会把一个数列分为两个几近相等的片段。这个意思就是每次递归调用处理一半大小的数列。因此,在到达大小为一的数列前,我们只要作log n次嵌套的调用。这个意思就是调用树的深度是O(log n)。但是在同一层次结构的两个程序调用中,不会处理到原来数列的相同部分;因此,程序调用的每一层次结构总共全部仅需要O(n)的时间(每个调用有某些共同的额外耗费,但是因为在每一层次结构仅仅只有O(n)个调用,这些被归纳在O(n)系数中)。结果是这个算法仅需使用O(n log n)时间。

Python快速排序算法相关推荐

  1. Python 快速排序算法【简单易懂,代码直接运行】

    Python 快速排序算法[简单易懂,代码直接运行] 给定你一个长度为 n 的整数数列. 请你使用快速排序对这个数列按照从小到大进行排序. 并将排好序的数列按顺序输出. 输入格式 输入共两行,第一行包 ...

  2. python快速排序算法循环_算法:快速排序的Python实现

    一.概述 快速排序(quick sort)是一种分治排序算法.该算法首先 选取 一个划分元素(partition element,有时又称为pivot):接着重排列表将其 划分 为三个部分:left( ...

  3. python快速排序算法详细图解_详解python实现快速排序算法

    人来人往,蜚短流长,不求此生匆匆过,但求每日在成长 快速排序严重依赖分区,分区部分完成就代表排序成功了一半 1.详细思路见代码注释部分: def quick_sort(l,low,high): ''' ...

  4. python快速排序算法没看懂_你需要知道的九大排序算法【Python实现】之快速排序...

    五.快速排序 基本思想:  通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序. 算法实现: ​ #coding: ...

  5. python快速排序算法_Python实现快速排序算法及去重的快速排序的简单示例

    快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用. 该方法的基本思想是: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或 ...

  6. python 快速排序算法

    快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列, 然后递归地排序两个子序列. 步骤为: a.挑选基准值:从数列中挑出一个元素,称为&q ...

  7. python快速排序算法详细图解_Python实现桶排序与快速排序算法结合应用示例

    说明: FreeNAS是一个基于FreeBSD的开源网络存储系统,支持iSCSI.NFS等共享协议, 通过Web页面进行管理,安装FreeNAS最小需要2G硬盘. 最新版本下载: http://iso ...

  8. python实现快排算法_Python实现快速排序算法

    Python实现快速排序算法 快速排序算法是一种基于交换的高效的排序算法,由C.R.A.Hoare于1962年提出,是一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide and ...

  9. python快速排序代码_Python实现快速排序算法

    原标题:Python实现快速排序算法 Python实现快速排序算法 快速排序算法是一种基于交换的高效的排序算法,由C.R.A.Hoare于1962年提出,是一种划分交换排序.它采用了一种分治的策略,通 ...

最新文章

  1. 导出Excel出现“异常来自 HRESULT:0x800A03EC”错误的解决方法(已验证)
  2. iOS 11开发教程(九)iOS11数据线连接真机测试
  3. 使用kubeadm 安装 kuberntes 1.13.3
  4. WiFiDemon – iOS WiFi RCE 0-Day漏洞利用
  5. 目前计算机硬件安全,计算机硬件策划安全问题若干研究论述.doc
  6. 作为一名程序员,谁没跳过槽,“6”招让你“空降”大厂
  7. mysql setup w_MySql的安装及配置详细指引!
  8. 20165323 第五周学习总结
  9. java代码进行短信接收_自动化测试-自动获取手机短信验证码
  10. DELPHI基础教程 第七章 剪贴板和动态数据交换
  11. Elasticsearch报错:NodeDisconnectedException[[][IP:9300][cluster:monitor/nodes/liveness] disc
  12. 通达OA的一些资源地址,持续更新
  13. 如何获取全国省市区行政边界数据
  14. STM32入门笔记(02):麦克纳姆轮、TB6612电机驱动、PID电机控制和编码器学习记录
  15. Gif表情包在线制作小程序
  16. Unable to register Log4j shutdown hook because JVM is shutting down. Using SimpleLogger 问题分析
  17. 使用gstreamer,rtsp拉流,保存图像, jeston,使用硬件加速nvdec/nvenc
  18. matlab处理时间数据绘图
  19. 让我摘下星星送给你_摘下星星给你摘下月亮给你是什么歌
  20. 产品分析报告如何做?

热门文章

  1. dijkstra算法_最小树——Dijkstra算法及Python实现
  2. “个人效率”与“组织效率”
  3. 远程登陆----radius认证
  4. vue form sumit 防止提交 prevent 阻止表单提交
  5. Linux 误删文件恢复命令及方法
  6. 企业级网络信息安全统一威胁监管的得力助手
  7. python利用 WMI 库操作windows
  8. Linux学习路线图
  9. python实践输出星星_python中怎么打印星星
  10. 企业互联网专线该怎么选?