主要分为两个子算法,PARTITION(A, p, r)以A[r]为基准对数组进行一个划分,比A[r]小的放在左边,比A[r]大的放在右边。QUICKSORT(A, p, r)是快速排序的子程序,调用划分程序对数组进行划分,然后递归地调用QUICKSORT(A, p, r),以完成快速排序的过程。快速排序的最差时间复杂度为O(n2),平时时间复杂度为O(nlgn)。最差时间复杂度的情况为数组基本有序的时候,平均时间复杂度为数组的数值分布较为平均的时候。在平时情况下快速排序跟堆排序的时间复杂度都为O(nlgn),但是快速排序的常数项较小,所以要优于堆排序。

PARTITION(A, p, r)

x ← A[r]i ← p - 1for j ← p to r - 1do if A[j] ≤ xthen i ← i + 1swap(A[i], A[j])swap(A[i + 1], A[r])return i + 1

QUICKSORT(A, p, r)

 if p < rthen q ← PARTITION(A, p, r)QUICKSORT(A, p, q - 1)QUICKSORT(A, q + 1, r)

实现:

#!/usr/bin/pythonimport sysdef partion(array, p, r):x = array[r]i = p - 1for j in range(p, r):if (array[j] < x):i+=1array[j], array[i] = array[i], array[j]i+=1array[i], array[r] = array[r], array[i]return idef quick_sort(array, p, r):if p < r:q = partion(array, p, r)quick_sort(array, p, q - 1)quick_sort(array, q + 1, r)if __name__ == "__main__":array = [1, 3, 5, 23, 64, 7, 23, 6, 34, 98, 100, 9]quick_sort(array, 0, len(array) - 1)for a in array:sys.stdout.write("%d " % a)

转载于:https://www.cnblogs.com/Mingxx/archive/2012/06/05/2537150.html

算法 排序 python 实现--快速排序相关推荐

  1. 算法 排序 python 实现--堆排序

    堆排序 #!/usr/bin/python import sysdef left_child(node):return node * 2 + 1def right_child(node):return ...

  2. python快速排序算法没看懂_你需要知道的九大排序算法【Python实现】之快速排序...

    五.快速排序 基本思想:  通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序. 算法实现: ​ #coding: ...

  3. 八大排序算法的 Python 实现

    八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入 ...

  4. 【Kick Algorithm】十大排序算法及其Python实现

    文章来源于NewBeeNLP,作者kaiyuan 写在前面 看到好像春招都已经陆续都开始了,最近抽空打算把自己和朋友的经验整理一下分享出来.作为一个刚刚经历秋招打击的自闭儿童,可以非常负责任地说手撕算 ...

  5. python基础===八大排序算法的 Python 实现

    本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一 ...

  6. 排序中减治法算法伪代码_算法浅谈——分治算法与归并、快速排序(附代码和动图演示)...

    在之前的文章当中,我们通过海盗分金币问题详细讲解了递归方法. 我们可以认为在递归的过程当中,我们通过函数自己调用自己,将大问题转化成了小问题,因此简化了编码以及建模.今天这篇文章呢,就正式和大家聊一聊 ...

  7. 经典排序算法及其Python实现

    写在前面 前面学习了几种典型的数据结构,当然数据结构和算法是密不可分的,算法作为程序的一个重要部分也是在求职面试中屡问不爽的考点,最近我们就来整理一下一些经典的算法,包括排序.查找.图.动态规划等等. ...

  8. python学习——python实现快速排序算法

    python实现快速排序算法 一.快速排序算法实现原理 基本思想 具体步骤 二.图解快速排序 三.py代码实现快速排序算法 一.快速排序算法实现原理 基本思想 先从数列中取出一个数作为基准数. 分区过 ...

  9. 详解排序算法(Python实现)

    sorting-algorithms-python Python的内置排序算法 与许多其他高级编程语言一样,Python语言提供了使用sorted()函数对数据进行开箱即用的功能.示例: >&g ...

最新文章

  1. simulink中使用memory模块实现变量的累加和(离散积分器)
  2. 当遭遇“用户增长”停滞,你应该怎么办?
  3. android 创建文件夹_Android安全(四)数据库 之 SQLite数据库
  4. 【转载】Linux下有趣的命令
  5. 【模板】一维树状数组
  6. git reset, git checkout, git revert 区别 (译)
  7. Python工作笔记-统计文件夹内只有1个文件的文件夹
  8. 本特利探头330101-00-40-10-02-CN
  9. WORD文件拼版生成PDF方法
  10. hp台式计算机u盘启动设置,惠普台式机U盘启动BIOS设置的方法教程
  11. android AsyncTask介绍
  12. HDMI接口 PCB布线指南-4层板为例
  13. ESD笔记(二)_ESD测试
  14. English_do
  15. 猿创征文|【算法入门必刷】数据结构-栈(二)
  16. Scipy_常用统计函数
  17. Python中用tkinter实现BMI计算
  18. 机器人唱歌bgm_Soul app里面机器人匹配的那首bgm是什么呀?好好听!!!求玩过soul的大神告知!!...
  19. PLS-00103: 出现符号 在需要下列之一时 ( ; is with oracle利用存储过程设计定时器的问题
  20. boa 传递 数据到 html,使用html网页boa这个web服务器通过cgi控制2410板子上LED灯点亮...

热门文章

  1. influxDB+grafana 日志监控平台(Golang)
  2. YunOS 对比 Android 两者究竟有何区别
  3. free查看可用缓存
  4. SSD成就了《扩散性百万亚瑟王》
  5. 轻松学MVC4.0–4 扩展UserProfile
  6. DOS下操作注册表的部分命令
  7. hive数据倾斜的解决办法
  8. 【神经网络】Dependency Parsing的两种解决方案
  9. 5.1深入理解计算机系统——系统级I/O
  10. multipart/form-data ajax 提交问题(未解决)