一、概述

快速排序(quick sort)是一种分治排序算法。该算法首先 选取 一个划分元素(partition element,有时又称为pivot);接着重排列表将其 划分 为三个部分:left(小于划分元素pivot的部分)、划分元素pivot、right(大于划分元素pivot的部分),此时,划分元素pivot已经在列表的最终位置上;然后分别对left和right两个部分进行 递归排序。

其中,划分元素的 选取 直接影响到快速排序算法的效率,通常选择列表的第一个元素或者中间元素或者最后一个元素作为划分元素,当然也有更复杂的选择方式;划分 过程根据划分元素重排列表,是快速排序算法的关键所在。

二、Python实现

1. 标准实现

#!/usr/bin/env python

# -*- coding: utf-8 -*-

def stdQuicksort(L):

qsort(L, 0, len(L) - 1)

def qsort(L, first, last):

if first < last:

split = partition(L, first, last)

qsort(L, first, split - 1)

qsort(L, split + 1, last)

def partition(L, first, last):

# 选取列表中的第一个元素作为划分元素

pivot = L[first]

leftmark = first + 1

rightmark = last

while True:

while L[leftmark] <= pivot:

# 如果列表中存在与划分元素pivot相等的元素,让它位于left部分

# 以下检测用于划分元素pivot是列表中的最大元素时,

#防止leftmark越界

if leftmark == rightmark:

break

leftmark += 1

while L[rightmark] > pivot:

# 这里不需要检测,划分元素pivot是列表中的最小元素时,

# rightmark会自动停在first处

rightmark -= 1

if leftmark < rightmark:

# 此时,leftmark处的元素大于pivot,

#而rightmark处的元素小于等于pivot,交换二者

L[leftmark], L[rightmark] = L[rightmark], L[leftmark]

else:

break

# 交换first处的划分元素与rightmark处的元素

L[first], L[rightmark] = L[rightmark], L[first]

# 返回划分元素pivot的最终位置

return rightmark

2. Pythonic实现

#!/usr/bin/env python

# -*- coding: utf-8 -*-

def pycQuicksort(L):

if len(L) <= 1: return L

return pycQuicksort([x for x in L if x < L[0]]) + \

[x for x in L if x == L[0]] + \

pycQuicksort([x for x in L if x > L[0]])

python快速排序算法循环_算法:快速排序的Python实现相关推荐

  1. python 书籍 办公 自动化_你们都用Python实现了哪些办公自动化?

    这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理简直是加班族的福音. 自动化办公无非是excel.ppt.word. ...

  2. python批量处理 办公_你们都用Python实现了哪些办公自动化?

    这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理简直是加班族的福音. 自动化办公无非是excel.ppt.word. ...

  3. python枚举算法流程图_算法-枚举

    本章我们进入算法的学习,我们会通过比较经典的例题去讲解一些常用的算法思想,常用的算法思想包括:枚举.递归.分治.贪心.试探.动态迭代和模拟等,本节我们来学习一下枚举算法. 1. 枚举思想 枚举算法我们 ...

  4. python考试题库开发_算法/开发 面试必看! 【python基础】面试题合集

    本合集整理了计算机专业相关算法/开发面试中遇到的[python基础]相关面试题,后续会持续更新,有需要的小伙伴可以点赞or收藏随时查阅哦!♥ Q:python不可变对象?可变对象?可变对象:list ...

  5. python 最优化算法库_哈工大硕士生用?Python 实现了 11 种经典数据降维算法,源代码库已开放...

    雷锋网 AI 开发者按:网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA. ...

  6. python 矩阵运算 for循环_如何用Python科学计算中的矩阵替代循环?

    比如求一个平面稳态导热问题,控制方程就是拉普拉斯方程: (我才发现原来有[插入公式]这个功能) 按照最简单的毅种循环来写就是: def laplace(u): nx, ny = u.shape for ...

  7. python如何实现循环_如何构造python循环

    python中的循环语句可以分为for循环和while循环. for循环可以遍历任何序列的项目,如一个列表或者一个字符串. for循环的一般格式如下:for in : else: 实例>> ...

  8. 我的python学习笔记全集_记录我的Python学习笔记

    不想再像以前那样,什么都从头开始学习语法.总结语法,这样反而会过分纠结于语法,耽误了开发,毕竟语言的主要属性是工具,次要的属性是语言本身. 所以还是先熟练使用语言去进行开发,等足够熟悉了,再去研究语言 ...

  9. 小学生python编程写游戏_小学生开始学Python,开发AI的首选编程语言:推荐一波Python书单...

    AlphaGo 都在使用的 Python 语言,是最接近 AI 的编程语言. 教育部考试中心近日发布了"关于全国计算机等级(NCRE)体系调整"的通知,决定自2018年3月起,在全 ...

最新文章

  1. 操作系统学习笔记 第一章:操作系统概述(王道考研)
  2. AI产业智能化白皮书 | 清华x百度:全面解读AI产业化的现在和未来(附下载)...
  3. [转载]通过Arcgis Server向MXD中添加图层
  4. 2/19 福建四校联考
  5. 小毛驴走呀走的openeim001
  6. mysql之index
  7. stm32编码器正反转计数程序_第六章:STM32CubeMx 定时器编码器模式基本使用方法...
  8. 另外一个给微信企业号发信息的python脚本
  9. [Java] 蓝桥杯ALGO-64 算法训练 大小写判断
  10. Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析
  11. 图象和文本的绝对位置(九)
  12. 轻量级网络模型之EfficientNet
  13. mysql-cluster5.7搭建集群(实际测试有效)
  14. C# 三菱PLC上位机开发环境搭建
  15. Verilog CIC 滤波器设计(代码自取)
  16. Phase2 Day22 JDBC
  17. 酒店ETL管理解决方案
  18. XSS Challenges stage#12-16 闯关详解
  19. 智能语音计算器(三)
  20. validate方法中校验工具类

热门文章

  1. java开发人员_每个Java开发人员都应该阅读的10本书
  2. 返回值是内置类型 不能更改_选择通过更改内容类型返回的详细程度,第二部分...
  3. 带有Gradle的Spring Boot Web应用程序
  4. Lucene分析过程指南
  5. 睡觉时:新增的Java 8新增功能
  6. PrimeFaces:在动态生成的对话框中打开外部页面
  7. 如何允许用户自定义UI
  8. HashMap如何在Java中工作
  9. JavaFX中的塔防(6)
  10. Hadoop赠品–综述