##快速排序算法
##基本思想:分治法,将数组分为大于和小于该值的两部分数据,然后在两部分数据中进行递归排序,直到只有一个数据结束
## step1: 取数组第一个元素为key值,设置两个变量,i = 0, j = len(a) - 1
## step2: j从后面开始遍历,遇到小于key的值,则a[i] = a[j]
## step3: i从前面开始遍历,遇到大于key的值,则a[j] = a[i]

## step4: 对两部分数据递归查找

代码如下:

def quicksort(a, m, n):
key = a[m]
i = m
j = n
while i < j:
while a[j] >= key and i < j:
j -= 1
if i < j:
a[i] = a[j]
i += 1
while a[i] <= key and i < j:
i += 1
if i < j:
a[j] = a[i]
j -= 1
a[i] = key
if m < i - 1:
quicksort(a, m, i - 1)
if n > j + 1:
quicksort(a, j + 1, n) if __name__ == '__main__':
b = [1, 22, 90, 4, 65, 3, 73, 8]
print(b)
length = len(b)
quicksort(b, 0, length - 1)
print(b)

  在网上看到另一个很简单的方法,在这里补充一下吧

def qsort(seq):
if seq==[]:
return []
else:
pivot=seq[0]
lesser=qsort([x for x in seq[1:] if x<pivot])
greater=qsort([x for x in seq[1:] if x>=pivot])
return lesser+[pivot]+greater if __name__=='__main__':
seq=[5,6,78,9,0,-1,2,3,-65,12]
print(qsort(seq))

  

python实现排序算法一:快速排序的更多相关文章

  1. Python之排序算法:快速排序与冒泡排序

    Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...

  2. Python实现排序算法之快速排序

    Python实现排序算法:快速排序.冒泡排序.插入排序.选择排序.堆排序.归并排序和希尔排序 Python实现快速排序 原理 首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它 ...

  3. python排序算法的实现-快速排序

    1. 算法描述: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左右区间重复第二步,直到各区间只有一个数. 2.pyth ...

  4. C#排序算法的实现---快速排序

    快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的 ...

  5. 排序算法一:插入排序(Insertion sort)

    最近从网易公开课在看麻省理工学院的公开课<算法导论>,感觉还不错,接下来几篇文章所示学习日记了,不准备对算法细节做过多描述,感兴趣的可以自己去看. 文章分几篇讲经典排序算法,直接上代码,根 ...

  6. Python学习(三) 八大排序算法的实现(下)

    本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过 ...

  7. 用python编写排序算法

    交换排序 === 冒泡排序,快速排序 插入排序 ===直接插入排序,希尔排序 选择排序 === 简单选择排序,堆排序 归并排序 基数排序 冒泡排序 要点 冒泡排序是一种交换排序. 什么是交换排序呢? ...

  8. python 常见排序实例

    使用Python 基础排序算法设计,冒泡排序,插入排序,快速排序... 需求 对一组无序数据进行排序算法设计,要求如下: 输入:[1, 3, 5, 23, 75, 34, 456, 86, 22, 7 ...

  9. python常见排序算法解析

    python——常见排序算法解析   算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...

随机推荐

  1. Mysql之 配置文件读取顺序

    On Unix, Linux and Mac OS X, MySQL programs read startup options from the following files, in the sp ...

  2. crm 2016 tabstatechange event

    1 tabstatechange事件在窗体中定义 2 问题是如果选项卡默认为折叠的.且选项卡中包含了iFrame网页. 3 在网页内容加载完成之后,点击选项卡 折叠/展开 按钮, iFrame网页没有 ...

  3. AWS之搭建深度学习主机

    B.G 至2017.11 GPU选型:(参考知乎.CSDN) 高性价比的两款:GTX1080ti, Titan X --通常调试算法  i7CPU+32G内存+SSD+2*GPU(单块显存>6G ...

  4. ctags使用

    1:安装ctags sudo apt-get install exuberant-ctags ctags --help 2:建立源码之间的组织关系: 1:ctags ./*.c -R 生成tags文件 ...

  5. tips:可变参数列表

    tips:可变参数列表! 先来看看以往我们要传递许多参数时是怎么做的: java: public static void main(String []args){} c: int main(int a ...

  6. Solr——Windows下部署Solr7.5.0至jetty、Tomcat

    Solr6用默认的Jetty启动 需要的软件支持 JDK1.8以上 Solr6的安装包(solr-7.5.0.zip ) Solr自带一个Jetty环境,可以很方便的运行Solr. 直接到解压缩的so ...

  7. MySQL字符集及校对规则的理解

      阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 正确使用字符集 MySQL客户端与字符集 字符集编码转换原理 字符集常见处理操作 字符集的正确实践 MySQL的校对 ...

  8. activiti explorer5.22.0源代码解读

    请求通过ExplorerApplicationServlet(AbstractApplicationServlet.service()方法)进入web系统中. Activiti Explorer的应用 ...

  9. python获取指定日期的前N天日期和后N天日期

    #encoding:utf-8from datetime import date, datetime, timedelta day = date.today()now = datetime.now() ...

  10. tkinter menu

    python] view plain copy '''''Tkinter教程之Menu篇''' '''''1.创建一个简单的Menu''' # 添加菜单hello和quit,将hello菜单与hell ...