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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
一张图带我们入门Python基础教程
Feb 05 Python
python2.7安装图文教程
Mar 13 Python
pandas表连接 索引上的合并方法
Jun 08 Python
python将回车作为输入内容的实例
Jun 23 Python
python二维列表一维列表的互相转换实例
Jul 02 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
Oct 22 Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
Jul 03 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
python 制作简单的音乐播放器
Nov 25 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
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
JS 控制CSS样式表
2009/08/20 Javascript
javascript 得到变量类型的函数
2010/05/19 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
js removeChild 方法深入理解
2016/08/16 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
Vue精简版风格概述
2018/01/30 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
vue $router和$route的区别详解
2020/12/02 Vue.js
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
简单的通用表达式求10乘阶示例
2014/03/03 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
image-set实现Retina屏幕下图片显示详细介绍
2012/12/24 HTML / CSS
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
应用电子技术专业个人求职信
2013/09/21 职场文书
大学运动会入场词
2014/02/22 职场文书
成绩单公证书
2014/04/10 职场文书
3的组成教学反思
2014/04/30 职场文书
大学自主招生推荐信
2014/05/10 职场文书
培训研修方案
2014/06/06 职场文书
公司人事管理制度
2015/08/05 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书