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使用PythonMagick将jpg图片转换成ico图片的方法
Mar 26 Python
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 Python
python简单实例训练(21~30)
Nov 15 Python
python web基础之加载静态文件实例
Mar 20 Python
python3安装speech语音模块的方法
Dec 24 Python
Python XlsxWriter模块Chart类用法实例分析
Mar 11 Python
pycharm无法导入本地模块的解决方式
Feb 12 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
Mar 30 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 Python
Python matplotlib可视化之绘制韦恩图
Feb 24 Python
Python可视化神器pyecharts绘制水球图
Jul 07 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 curl 并发最佳实践代码分享
2012/09/05 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
理解Javascript_08_函数对象
2010/10/15 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
JSON格式化输出
2014/11/10 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
python的re正则表达式实例代码
2018/01/24 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
python datetime处理时间小结
2020/04/16 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
智能钱包:Ekster
2019/11/21 全球购物
什么是组件架构
2016/05/15 面试题
物理研修随笔感言
2014/02/14 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
护理专业自荐信范文
2015/03/06 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
民间借贷借条如何写
2015/05/26 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
飞越疯人院观后感
2015/06/09 职场文书
python微信智能AI机器人实现多种支付方式
2022/04/12 Python
速龙x4-860k处理器相当于i几
2022/04/20 数码科技