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 相关文章推荐
使用cx_freeze把python打包exe示例
Jan 24 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
python matplotlib坐标轴设置的方法
Dec 05 Python
python版opencv摄像头人脸实时检测方法
Aug 03 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
pandas读取csv文件,分隔符参数sep的实例
Dec 12 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
Python多线程的退出控制实现
Aug 10 Python
Django admin组件的使用
Oct 24 Python
OpenCV-Python实现图像平滑处理操作
Jun 08 Python
Python sklearn分类决策树方法详解
Sep 23 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
PHP函数in_array()使用详解
2014/08/20 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
PHP缓冲区用法总结
2016/02/14 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
dreamweaver 安装Jquery智能提示
2011/04/02 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
jquery.validate使用详解
2016/06/02 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
python爬虫框架talonspider简单介绍
2017/06/09 Python
Python实现读取json文件到excel表
2017/11/18 Python
python:print格式化输出到文件的实例
2018/05/14 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
3种python调用其他脚本的方法
2020/01/06 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
python 下载文件的多种方法汇总
2020/11/17 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
毕业生找工作推荐信
2013/11/21 职场文书
高中家长寄语
2014/04/02 职场文书
教师一岗双责责任书
2014/04/16 职场文书
七夕情人节促销方案
2014/06/07 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
销售员岗位职责
2015/02/10 职场文书
2015年三万活动总结
2015/03/25 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL