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的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
Python中encode()方法的使用简介
May 18 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
Python中多个数组行合并及列合并的方法总结
Apr 12 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
Nov 06 Python
初探利用Python进行图文识别(OCR)
Feb 26 Python
解决Django中多条件查询的问题
Jul 18 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 Python
Python获取android设备cpu和内存占用情况
Nov 15 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之Smarty入门
2007/01/04 PHP
php最简单的删除目录与文件实现方法
2014/11/28 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
2013/04/23 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
Python实现字符串格式化输出的方法详解
2017/09/20 Python
Python实现学校管理系统
2018/01/11 Python
django中间键重定向实例方法
2019/11/10 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
python3将变量输入的简单实例
2020/08/19 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
python爬虫 requests-html的使用
2020/11/30 Python
英国在线花园中心:You Garden
2018/06/03 全球购物
公司总经理助理岗位职责
2014/07/09 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
入党积极分子考察意见
2015/06/02 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
2016年春季运动会通讯稿
2015/11/25 职场文书
python实现手机推送 代码也就10行左右
2022/04/12 Python