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之Python安装
Sep 12 Python
在Python中使用判断语句和循环的教程
Apr 25 Python
python中利用Future对象异步返回结果示例代码
Sep 07 Python
python+opencv识别图片中的圆形
Mar 25 Python
Django 开发调试工具 Django-debug-toolbar使用详解
Jul 23 Python
Python中调用其他程序的方式详解
Aug 06 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
Aug 30 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
python 两个一样的字符串用==结果为false问题的解决
Mar 12 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 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加密解密示例分享
2014/01/29 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
Python csv模块使用方法代码实例
2019/08/29 Python
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
学生社团文化节开幕式主持词
2014/03/28 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
2014年度党员自我评议
2014/09/13 职场文书
投资入股合作协议书
2014/10/28 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
2015年公司工作总结
2015/04/25 职场文书
“5.12”护士节主持词
2015/07/04 职场文书