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调用机器喇叭发出蜂鸣声(Beep)的方法
Mar 23 Python
python类继承与子类实例初始化用法分析
Apr 17 Python
Python编码爬坑指南(必看)
Jun 10 Python
Python实现聊天机器人的示例代码
Jul 09 Python
python-opencv 将连续图片写成视频格式的方法
Jan 08 Python
python实现多张图片拼接成大图
Jan 15 Python
python3实现zabbix告警推送钉钉的示例
Feb 20 Python
Python read函数按字节(字符)读取文件的实现
Jul 03 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
python读取hdfs并返回dataframe教程
Jun 05 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 Python
Python实例教程之检索输出月份日历表
Dec 16 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
PHP 命令行参数详解及应用
2011/05/18 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
使用PHP编写发红包程序
2015/07/22 PHP
HTML Dom与Css控制方法
2010/10/25 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
python根据文件大小打log日志
2014/10/09 Python
Python 中pandas.read_excel详细介绍
2017/06/23 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
Python查看微信撤回消息代码
2018/06/07 Python
关于python写入文件自动换行的问题
2018/06/23 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
python3人脸识别的两种方法
2019/04/25 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
python同步两个文件夹下的内容
2019/08/29 Python
大数据分析用java还是Python
2020/07/06 Python
Python 远程开关机的方法
2020/11/18 Python
越南综合购物网站:Lazada越南
2019/06/10 全球购物
举例说明类变量和实例变量的区别
2016/06/30 面试题
什么是方法的重载
2013/06/24 面试题
优秀社区干部事迹材料
2014/02/03 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
婚庆答谢词
2015/01/04 职场文书
李强为自己工作观后感
2015/06/11 职场文书
永远是春天观后感
2015/06/12 职场文书
生产设备维护保养制度
2015/08/06 职场文书
Pytest中skip skipif跳过用例详解
2021/06/30 Python