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生成随机密码
Mar 10 Python
python编写爬虫小程序
May 14 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
Jul 23 Python
bat和python批量重命名文件的实现代码
May 19 Python
Python算术运算符实例详解
May 31 Python
浅谈python jieba分词模块的基本用法
Nov 09 Python
pycharm中成功运行图片的配置教程
Oct 28 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
python flask几分钟实现web服务的例子
Jul 26 Python
python实现将json多行数据传入到mysql中使用
Dec 31 Python
python中xlrd模块的使用详解
Feb 01 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
10条php编程小技巧
2015/07/07 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
浅析AngularJS Filter用法
2015/12/28 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
js实现特别简单的钟表效果
2020/09/14 Javascript
vue编写简单的购物车功能
2021/01/08 Vue.js
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
python制作最美应用的爬虫
2015/10/28 Python
Python实现的弹球小游戏示例
2017/08/01 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
Python程序退出方式小结
2017/12/09 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
世界上最好的足球商店:Unisport
2019/03/02 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
高中军训感言1000字
2014/03/01 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
话题作文之成长
2019/12/09 职场文书