参考博文:http://www.cnblogs.com/jingmoxukong/p/4302891.html

快速排序是一种交换排序

快速排序由C. A. R. Hoare在1962年提出。

它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数

它的基本流程是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

算法结构如图所示:

图中,演示了快速排序的处理过程:

初始状态为一组无序的数组:2、4、5、1、3。

经过以上操作步骤后,完成了第一次的排序,得到新的数组:1、2、5、4、3。

新的数组中,以2为分割点,左边都是比2小的数,右边都是比2大的数。

因为2已经在数组中找到了合适的位置,所以不用再动。

2左边的数组只有一个元素1,所以显然不用再排序,位置也被确定。(注:这种情况时,left指针和right指针显然是重合的。因此在代码中,我们可以通过设置判定条件left必须小于right,如果不满足,则不用排序了)。

而对于2右边的数组5、4、3,设置left指向5,right指向3,开始继续重复图中的一、二、三、四步骤,对新的数组进行排序。

在此采用python语言实现,代码如下:

example = [1,3,4,5,2,6,9,7,8,0]a = 0
b = len(example)-1def quickSort(number,head,tail):if (head<tail):base = division(number,head,tail)#print(number[base],"\n")quickSort(number,head,base-1)quickSort(number,base+1,tail)else:print(number)def division(number,head,tail):base = number[head]while(head<tail):while(head<tail and number[tail]>=base):tail-=1number[head] = number[tail]while (head<tail and  number[head]<=base):head+=1number[tail] = number[head]number[head] = basereturn headif __name__ == '__main__':quickSort(example,a,b)

  

运行结果如下图:

  • 时间复杂度与空间复杂度

当数据有序时,以第一个关键字为基准分为两个子序列,前一个子序列为空,此时执行效率最差。

而当数据随机分布时,以第一个关键字为基准分为两个子序列,两个子序列的元素个数接近相等,此时执行效率最好。

所以,数据越随机分布时,快速排序性能越好;数据越接近有序,快速排序性能越差。

快速排序在每次分割的过程中,需要 1 个空间存储基准值。而快速排序的大概需要 Nlog2N次的分割处理,所以占用空间也是 Nlog2N 个。

转载于:https://www.cnblogs.com/Hangingter/p/9589427.html

快速排序方法——python实现相关推荐

  1. 点击Ehlib列标题的快速排序方法

    2019独角兽企业重金招聘Python工程师标准>>> 点击Ehlib列标题的快速排序方法 procedure SortDBGridEh(Sender: TObject; ACol: ...

  2. tensorflow保存模型和加载模型的方法(Python和Android)

    tensorflow保存模型和加载模型的方法(Python和Android) 一.tensorflow保存模型的几种方法: (1) tf.train.saver()保存模型 使用 tf.train.s ...

  3. python selenium定位元素方法,python + selenium 练习篇 - 定位元素的方法

    1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8 from selenium import webdriver driver = webdriver.Chrome ...

  4. 图像处理核函数:之高斯核的生成方法 python

    图像处理核函数:之高斯核函数的生成方法 python 高斯核函数(低通高斯滤波器核) 高斯分布函数 高斯核生成函数 代码 效果 高斯核函数的图像 高斯核函数(低通高斯滤波器核) 最近在看DIP(Dig ...

  5. python、中循环功能可通过什么命令实现_python定时执行指定函数的方法 Python如何定时循环执行命令?...

    python中如何定时执行某一个函数 = =怎么连接..先调用注册函数 然后调用登录函数就行.顺序执行.至于如果你说注册失败不进行登录的话 直接在注册函数里面处理 注册失败 return def si ...

  6. python list index方法,Python List.index()方法

    Python List index()方法 Python index()方法返回传递的元素的索引.此方法接受一个参数并返回其索引.如果该元素不存在,则会引发ValueError. 如果list包含重复 ...

  7. python怎么清屏_python实现清屏的方法 Python Shell中清屏一般有两种方法。

    Python Shell 怎样清屏? Python Shell中清屏一般有两种方法. 奈何一个人随着年龄增长,梦想便不复轻盈:他开始用双手掂量生活,更看重果实而非花朵.--叶芝<凯尔特的搏暮&g ...

  8. python查看指令的方法python -h

    python查看指令的方法python -h 进入cmd 输入 python -h C:\Users\Administrator>python -h usage: python [option] ...

  9. 仅需10道题轻松掌握Python字符串方法 | Python技能树征题

    仅需10道题轻松掌握Python字符串方法 | Python技能树征题 0. 前言 1. 第 1 题:字符串检查 2. 第 2 题:字符串大小写转换 3. 第 3 题:字符串开头或结尾匹配 4. 第 ...

最新文章

  1. 关于log4net使用中遇到的错误
  2. Android系统中的进程管理:进程的创建
  3. 全志A33-ARM编译并安装net-tools
  4. 论文浅尝 | 六篇2020年知识图谱预训练论文综述
  5. 常用的stm32库函数
  6. php 5.5编译安装教程,CentOS 5.5编译安装Nginx1.0.15+MySQL5.5.23+PHP5.3.10
  7. PDF阅读器哪个好用?看完这篇文章就可以不用再问了
  8. MTK刷机(ubuntu下)
  9. Java调用WebService接口的四种方式
  10. 【国内首套H3C V7交换机实战课程-1】Comware V7使用、维护与管理-王达-专题视频课程...
  11. USRP X310 Windows烧录
  12. zabbix三种常用报警方式:邮件、微信和短信报警
  13. numpy 归一化 与 标准化
  14. ADB向手机安装APK失败
  15. 计算机系统盘突然爆满,电脑c盘突然爆满是怎么个情况_电脑c盘和d盘的区别
  16. adb shell提示:device unauthorized
  17. Matlab中 .‘ 的作用
  18. 韩国梨花女子大学计算机类,韩国留学梨花女子大学院系设置详解
  19. Windows系统安全登录日志分析工具logonTracer汉化修正版
  20. 利用rfcomm实现树莓派与手机通信_树莓派资源整理汇总(2020年2月18日更新)

热门文章

  1. Node的textContent属性
  2. java歌词添加,分享 :java实现 歌词文件的智能命名解决方法
  3. c#chart背景透明_C#+Layui开发后台管理系统
  4. vbs 获取计算机主机名,vbs 获取主机名
  5. java 组合 遍历 算法_java编程n个集合每次从每个集合里面取出一个元素组成一个字符串列出所有组合算法...
  6. git 改了一段代码不想要了_想要壁纸不收费吗?简简单单用python代码实现
  7. python字典包含指定键_python-字典中所有值的总和,其中包含键中的项
  8. mysql ignore-columns_坑 - 当insert ignore遇到not null
  9. eclipse 返回上一个选项卡、注释及取消注释 、大写变小写、 光标跳到下一行快捷键
  10. mipi 屏 通过寄存器调背光