Python实现快速排序算法及去重的快速排序的简单示例


Posted in Python onJune 26, 2016

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用。

该方法的基本思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

现在通过一个实例来说明快排。

比如有一个数组:

6 2 4 5 3

第一步:选取一个基准数,不要被这个名词吓到了,你可以把它看作是一个比较大小的数,因为排序就是比较大小,

比如我选取最后一个数3为基准数,依次把数组的数和3比较,比3小的放左边,比3大的放右边,这样有如下结果:

2 3 6 4 5

第二步:判断区间个数,经过第一步后左边区间只有一个数了,没有数字再和它比较了,因此不需要重复操作,右边区间还有:

6 4 5

重复第一步,选取5作为基准数,得到比较结果:

4 5 6

这样左右两边区间都只有一个数了,这就标志着排序完成,最后把所有区间合并就得到排序结果:

2 3 4 5 6
def quick_sort(array):
  less = []; greater = []
  if len(array) <= 1:
    return array
  pivot = array.pop()
  for x in array:
    if x <= pivot: less.append(x)
    else: greater.append(x)
  return quick_sort(less) + [pivot] + quick_sort(greater)
list = [2,4,2,6,7,8,1]
print quick_sort(list)
[1, 2, 2, 4, 6, 7, 8]

相比C、C#、JAVA之类的是不是简单多了^.^

TIP:去重的快速排序
如下, 只需要把集合修改为单值元素,这里我们使用Python3来演示:

# -*- coding: utf-8 -*- 
  
import random 
 
L = [2, 3, 8, 4, 9, 5, 6, 5, 6, 10, 17, 11, 2] 
 
def qsort(L): 
  if len(L)<2: return L 
  pivot_element = random.choice(L) 
  small = [i for i in L if i< pivot_element] 
  #medium = [i for i in L if i==pivot_element] 
  large = [i for i in L if i> pivot_element] 
  return qsort(small) + [pivot_element] + qsort(large) 
 
print(qsort(L))

输出:

[2, 3, 4, 5, 6, 8, 9, 10, 11, 17]

也可以直接使用, 集合(set)进行排序和去重.

mylist = list(set(L)) #集合自动排序字符串
Python 相关文章推荐
python解析json实例方法
Nov 19 Python
Python中title()方法的使用简介
May 20 Python
Python 爬虫图片简单实现
Jun 01 Python
Python 获取当前所在目录的方法详解
Aug 02 Python
pandas中Timestamp类用法详解
Dec 11 Python
python用户评论标签匹配的解决方法
May 31 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
python Shapely使用指南详解
Feb 18 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
numpy中生成随机数的几种常用函数(小结)
Aug 18 Python
Python-openpyxl表格读取写入的案例详解
Nov 02 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 #Python
理解生产者消费者模型及在Python编程中的运用实例
Jun 26 #Python
python安装mysql-python简明笔记(ubuntu环境)
Jun 25 #Python
Python的装饰器用法学习笔记
Jun 24 #Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 #Python
深入解析Python编程中super关键字的用法
Jun 24 #Python
深入了解Python数据类型之列表
Jun 24 #Python
You might like
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
js常用函数 不错
2006/09/08 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
php 中序列化和json使用介绍
2013/07/08 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
js自定义回调函数
2015/12/13 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
python 获取et和excel的版本号
2009/04/09 Python
Python装饰器原理与用法分析
2018/04/30 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
英国电器零售商:PRC Direct
2018/06/21 全球购物
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
护士求职自荐信
2015/03/25 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
javascript函数式编程基础
2021/09/15 Javascript
Python利用FlashText算法实现替换字符串
2022/03/31 Python
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python