快速排序由于排序效率在同为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实现快速排序算法及去重的快速排序的简单示例相关推荐

  1. 利用python画钻石_python多继承(钻石继承)问题和解决方法简单示例

    本文实例讲述了python多继承(钻石继承)问题和解决方法.分享给大家供大家参考,具体如下: 在菱形多继承中,如果用父类.__init__()来调用父类的初始化方法,最上层会执行两次,所以遇到这种情况 ...

  2. python实现排列组合公式算法_Python实现卡尔曼滤波算法之贝叶斯滤波

    Python实现卡尔曼滤波算法之贝叶斯滤波 作者:yangjian 卡尔曼滤波器属于贝叶斯滤波器的一种特例,本文主要讲解贝叶斯滤波原理及其算法的python实现. 先来看下贝叶斯公式 贝叶斯公式 :后 ...

  3. python中值滤波算法_Python实现卡尔曼滤波算法之贝叶斯滤波

    Python实现卡尔曼滤波算法之贝叶斯滤波 作者:yangjian 卡尔曼滤波器属于贝叶斯滤波器的一种特例,本文主要讲解贝叶斯滤波原理及其算法的python实现. 先来看下贝叶斯公式 贝叶斯公式 :后 ...

  4. python实现ks算法_Python实现Dijkstra算法

    Dijkstra算法 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要 ...

  5. python音频聚类_Python实现聚类算法AP

    1.算法简介 AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法.AP算法的基本思想是将全部数据点都 ...

  6. python 计算订单_python实现apriori算法的关联规则之支持度、置信度、提升度

    Apriori算法的简介 Apriori算法:使用候选项集找频繁项集 Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法.其核心是基于两阶段频集思想的递推算法.该关联规则在分类上属于单维 ...

  7. python谱聚类算法_Python机器学习高级算法!谱聚类(Spectal Clustering)算法分析和实例详解...

    谱聚类(Spectal Clustering)算法是聚类算法的一种,比起传统的K-Means聚类算法,谱聚类算法的效果更优秀,其计算量也小很多,除了谱聚类和K-Means聚类算法,另外还有密度聚类和层 ...

  8. python怎么画多重饼状图_Python通过matplotlib画双层饼图及环形图简单示例

    (1) 饼图(pie),即在一个圆圈内分成几块,显示不同数据系列的占比大小,这也是我们在日常数据的图形展示中最常用的图形之一. 在python中常用matplotlib的pie来绘制,基本命令如下所示 ...

  9. python首字母大写其他小写_python大小写转换,首字母大写,去除特殊字符的简单示例...

    这篇文章主要为大家详细介绍了python大小写转换,首字母大写,去除特殊字符的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两 ...

  10. python画环形图_Python通过matplotlib画双层饼图及环形图简单示例

    摘要:这篇Python开发技术栏目下的"Python通过matplotlib画双层饼图及环形图简单示例",介绍的技术点是"matplotlib.Python.简单示例.饼 ...

最新文章

  1. dso_loader.cc:55] Could not load dynamic library ‘cudart64_100.dll‘
  2. arm el2与el3_ARMv8的学习笔记
  3. 操作iframe里面的标签内容
  4. C++中的内联函数inline总结
  5. canvas笔记-绘制运动小球(落地弹起,遇边回弹)
  6. 纯手写实现HashMap
  7. flask-bootstrap插件
  8. C++中STL-queue使用方法
  9. java自行车起源_自行车的起源
  10. Android-JNI开发系列《三》-异常处理
  11. 字典攻击ssh弱口令
  12. 【转】分辨率。各种vga和各种dpi
  13. FAT文件系统规范v1.03学习笔记---1.保留区之启动扇区与BPB
  14. 大学计算机简单的感想,爱计算机的我大学生活感悟
  15. 今天刚到货的小米平板2,就出现dnx fastboot mode一直卡死黑屏
  16. 华为鸿蒙荣耀壁纸,华为Mate 40全新主题、系统壁纸曝光:高清无水印
  17. php微信一次性订阅消息demo,微信一次性订阅消息公众号或网页接入文档说明
  18. Verilog状态机详述
  19. 破解长虹电视不能安装u盘app,快速安装第三方软件
  20. PTA 7-98 海盗分赃 (25分)

热门文章

  1. mapstruct 1.4.2 和 lombok 1.18.16 及以上版本结合使用
  2. RRT,RRT*,A*,Dijkstra,PRM算法
  3. java的两种运行方式Applet和Application你真的懂吗
  4. mysql cross apply_SQL Server CROSS APPLY和OUTER APPLY的应用详解
  5. python多线程调用携程,进程、线程和携程的通俗解释【刘新宇Python】
  6. 苹果4s忘记id密码怎么办_苹果电脑 / Mac 忘记了开机密码怎么办?
  7. 操作系统原理:全局页面置换算法、工作集页置换、常驻集页置换、抖动问题
  8. 华为鸿蒙ai字幕,EMUI11一个值得吹爆的功能?AI字幕,支持翻译英日韩
  9. OS / Linux / 制作 deb 包
  10. C/Cpp / #include