快速排序也是使用了分治思想的排序方法,但与归并排序不一样的是“分”的时候的依据。归并排序“分”的依据是对半分,不管大小,而快速排序则是选定数组中的一个值,以这个值为依据,将数组分为三个部分:小于这个值的部分,大于等于这个值的部分,这个值。这样就以选定的点将数组分为两部分(小于值的部分,大于等于值的部分),然后再通过迭代对这两个部分分别继续执行这样一个“分”的过程,直至最后只剩下1-2个元素,即无法再“分”时,此时数组也排序完成。
下面以图示的方法展示一下第一次“分”的过程。
首先给出要排序的数组l=[2,8,7,1,3,5,6,4]l=[2,8,7,1,3,5,6,4]l=[2,8,7,1,3,5,6,4],stastasta和endendend分别为数组的首尾下标。利用iii和jjj这两个数进行迭代。令i=sta−1,j=stai=sta-1,j=stai=sta−1,j=sta。








迭代过程中分成了这样几个部分:

iii所在的位置是&lt;end&lt;end<end的最新的一个值,在“分”的最后,将返回i+1i+1i+1,即用来比较的值的位置,以供下次迭代。
具体的python代码实现如下。

#将数组分为两部分
def partition(l0,sta,end):i=sta-1for j in range(sta,end):if l0[j]<l0[end]:i=i+1#如果j所在的位置的值小于end,则i往前进一步,并与j的值交换,即将一个新的值加入到<end的区域x=l0[i]l0[i]=l0[j]l0[j]=x#一次“分”结束,将用于比较的值放在应该在的地方(两个区域的中间)i=i+1x=l0[i]l0[i]=l0[end]l0[end]=xreturn idef quicksort(l0,sta,end):#当至少存在两个元素时,才进行接下来的分解if sta<end:mid=partition(l0,sta,end)#分成的sta—mid-1,mid+1—end两个区域接着进行分解、迭代quicksort(l0,sta,mid-1)quicksort(l0,mid+1,end)return l0

快速排序的最坏情况,即每次分解时都极其不平衡,分解为n−1n-1n−1个元素和000个元素,这样分解操作的时间复杂度为Θ(n)Θ(n)Θ(n),而对大小为000的数组进行迭代会直接返回,时间复杂度可以忽略。这样算法运行时间的递归式为
T(n)=T(n−1)+Θ(n)T(n)=T(n-1)+Θ(n)T(n)=T(n−1)+Θ(n)
解为T(n)=Θ(n2)T(n)=Θ(n^2)T(n)=Θ(n2)
而最好的情况则是每次都对半分,这样算出的时间复杂度为Θ(nlgn)Θ(nlgn)Θ(nlgn)
而即使是每次的划分达到9:19:19:1这样一个很不平衡的状态,最终算出的时间复杂度也是Θ(nlgn)Θ(nlgn)Θ(nlgn),事实上,即使是99:199:199:1也是这样的时间复杂度。(结论和推导均来自《算法导论》)
所以快速排序法的期望时间复杂度为Θ(nlgn)Θ(nlgn)Θ(nlgn),是一个优秀的排序算法。

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

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

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

  2. Python 实现快速排序算法

    快速排序(Quick sort) 快速排序(Quick sort),又称划分交换排序 快速排序算法如下: 从数列中挑出一个元素,称为"基准"(pivot), 重新排序数列,所有元素 ...

  3. Python版快速排序算法

    Python版冒泡排序算法请参考Python版冒泡法排序算法 Python版选择排序算法请参考Python版选择排序算法 from random import randint def quickSor ...

  4. python快速排序算法详细图解_详解python实现快速排序算法

    人来人往,蜚短流长,不求此生匆匆过,但求每日在成长 快速排序严重依赖分区,分区部分完成就代表排序成功了一半 1.详细思路见代码注释部分: def quick_sort(l,low,high): ''' ...

  5. python实现快速排序算法_基础算法:快速排序(python实现)

    算法原理 快速排序是一个具有较高性能的排序算法,其主要思想如下: 对数组中的某个元素,确定其在数组中的排序位置,即在其之前的所有元素均小于该元素,在其之后的均大于该元素.对小元素组和大元素组同样执行该 ...

  6. Python之快速排序算法实现(二)

    相对于算法实现(一),下面这个实现过程更容易理解: #!/usr/bin/python class sort:def quicksort2(self,seq,left,right):i = left; ...

  7. python实现快排算法_Python实现快速排序算法

    Python实现快速排序算法 快速排序算法是一种基于交换的高效的排序算法,由C.R.A.Hoare于1962年提出,是一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide and ...

  8. python快速排序代码_Python实现快速排序算法

    原标题:Python实现快速排序算法 Python实现快速排序算法 快速排序算法是一种基于交换的高效的排序算法,由C.R.A.Hoare于1962年提出,是一种划分交换排序.它采用了一种分治的策略,通 ...

  9. Python使用超高效算法查找所有类似123-45-67+89=100的组合

    问题描述:在123456789这9个数字中间插入任意多个+和-的组合,使得表达式的值为100,输出所有符合条件的表达式. 昨天发了一个暴力测试的方法来解决问题,详见Python查找所有类似于123-4 ...

最新文章

  1. 美国《消费者报告》实测特斯拉Model 3,“完全自动驾驶”名不符实
  2. 【python基础】list操作相关:扩充、条件查找【IndexError: list assignment index out of range】...
  3. 使用Apriori算法进行关联分析
  4. promise异步请求串行异步then并行异步all竞争异步race 传递参数resolve(then)reject(catch)
  5. iOS开发tableview二级联动的细节实现中注意的细节总结
  6. 利用Excel批量高速发送电子邮件
  7. 《Scikit-Learn与TensorFlow机器学习实用指南》第5章 支持向量机
  8. otl oracle存储过程,OTL调用存储过程/函数及注意事项
  9. html5 xml文本编辑,简介XML文档的阅读与编辑
  10. 【转】大厦将倾,互联网将如何变革传统行业(下)
  11. 戴尔修复计算机软件,DELL电脑系统恢复工具(Dell OS Recovery Tool)2019 v2.3.6066官方版...
  12. 使用hashcat获取哈希值
  13. enfuzion与lsf构建渲染集群_集群渲染系统构建及优化-精选文档
  14. Arcgis更换布局模板_PPT模板到底怎么用呢?
  15. (原创)直观了解通道混和器的校色作用
  16. 2021年如何低成本开启创业?
  17. Asible简介及部署
  18. 京东的笔记本电脑和实体店有区别吗
  19. 计算机无法装会声会影,会声会影“应用程序无法启动,因为应用程序的并行配置不正确”的解决方案-会声会影中文官网...
  20. 周杰伦粉丝赢了超话大战

热门文章

  1. typroa主题分享
  2. 经验总结木马免杀方法总结篇
  3. 【计算机毕业文章】基于SSM的社区医疗保健管理系统的设计与实现
  4. linux查看CPU架构
  5. 题目 2263: 饮料换购
  6. 新发现------与Python的首次邂逅
  7. 国标GB28181入门
  8. [JVM]dump分析工具_fastthread.io
  9. Linux零基础快速入门篇
  10. Spring Boot Starters是什么?