递归排序算法快速排序的实现过程

快速排序(Insertion Sort)也是一种递归排序算法

快速排序原理:先以列表中的任意一个数为基准(一般选头或尾),将列表分为左、右两个子列表。

左子列表的数要比基准数小,右子列表的数要比基准数大。然后继续把左子列表和右子列表按同样的方法继续分解、比较,直到分无可分。最后将左子列表(比基准数小)+基准数+右子列表(比基准数大)连接起来得到一个有序数列。

递归排序算法快速排序的实现过程

以数列[3,5,8,1,2,9,4,7,6]为例,最初的数列顺序如上图所示。

第一次分组:以最后一个元素6为基准将数列分成两组。分别从左右两端遍历数列,比6小的分在左边,比6大的分在右边。先从左向右遍历,当遇到比6大的元素时将该元素放到右边。同理从右向左遍历时,遇到比6小的元素放到左边。当全部元素被遍历之后,将左边数列,元素6,右边数列按顺序拼接成新的数组,此时元素6的位置固定。

递归排序算法快速排序的实现过程

递归处理左边子数列:以最后一个元素2为基准,比2小的分在左边子数列中,比2大的分在右边子数列中经过一轮分组后,元素2的位置已经固定,接下来继续递归的调用上述过程……

递归排序算法快速排序的实现过程

递归处理右边子数列:以最后一个元素9为基准,比9小的分在左边子数列中,比9大的分在右边子数列中经过一轮分组后,只会分成一组【8,7】,再次递归处理【8,7】,至此排序完毕。

递归排序算法快速排序的实现过程

快速排序的程序quicksort.py的代码如下:

def quicksort(ilist):less = [] # 小于基准元素的放到这个列表中equal = [] # 等于基准元素的放到这个列表中greater = [] # 大于基准元素的放到这个列表中if len(ilist) > 1:pivot = ilist[len(ilist)-1] # 取数组最后一个元素作为基准元素for x in ilist:if x < pivot: # 小于基准元素的放到列表less中less.append(x)elif x == pivot: # 等于基准元素的放到这个列表中equal.append(x)elif x > pivot: # 大于基准元素的放到列表greater中greater.append(x)return quicksort(less)+equal+quicksort(greater) # 将三部分拼接起来else: # 只有一个元素的时候直接返回return ilist

测试快速排序方法,代码如下:

递归排序算法快速排序的实现过程

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/366913.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
黑马程序员黑马程序员订阅用户
上一篇 2023年8月29日 15:37
下一篇 2023年8月29日 15:47

相关推荐

  • 小编分享SEO终极算法:一篇文章精通SEO优化。

    seo搜索引擎优化 一、PC/移动端 如今是移动互联网时代,之前的老网站已经跟不上时代了,目前做的网站基本都是主打移动站点。如果你的老网站不适合在移动端展示,趁早叫程序员改版,网站至少要做到简洁美观。 二、网…

    2023年6月19日
    02
  • 百度绿萝算法针对网站哪些问题

    百度绿萝算法是百度为了解决搜索引擎反作弊等问题而产生的一种算法,那么百度绿萝算法原理是什么?百度绿萝算法针对网站哪些问题呢?下面就让我们一起去看看吧。 百度绿萝算法 百度绿萝算法原理 1、链接title与所指向…

    2022年5月21日
    0300
  • 什麽叫做排名算法?

    排名算法是搜索引擎用来对其索引中的列表进行评估和排名的规则。排名算法决定哪些结果是与特定查询相关的。大多效搜索引擎决定关健词排名的因素都超过100种以上,但最爲重要的壹些算法在各大搜索引擎部是通用的,例…

    2014年1月12日
    0124
  • 小编教你百度惊雷算法推出后有何影响怎样避免遭受算法打击。

    2022年11月20日零点,百度搜索引擎在百度搜索资源平台发布公告,推出“惊雷算法”。“惊雷算法”于11月底开始生效,主要打击依靠点击排名的seo方法,在短短的几个月内,百度依次推出了飓风算法、清风算法、惊雷算法,那…

    2023年6月20日
    01
  • 教你TrustRank算法。

    TrustRank 算法        TrustRank是近年来比较受关注的基于链接关系的排名算法。TrustRank可以翻译为“信任指数”。        TrustRank算法最初来自于2004年斯坦福大学和雅虎的一项联合研究,用来检测垃圾网站,并且于…

    2023年6月18日
    04
  • 小编分享建立网站企业品牌为什么那么重要。

    建立网站企业品牌为什么那么重要? 对于搜索引擎而言,为什么政府、科研机构、大学、社会福利部门的官方网站优化具有较高的排名,因为,这些网站在某个垂直领域,具有极高的权威度,以及社会影响力。 这就是为什么…

    2022年11月14日
    05
  • 重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

    回顾 面向对象三大特性 封装:隐藏数据实现,提供外部调用的方法 继承:实现代码的重用,提高效率 多态:方法的重载,PHP不支持多态   PHP继承:extends 如果一个类是用来被实例化的,那么尽可能的将内容私有…

    2019年1月11日 我php路线
    0378
  • 小编分享python怎么求阶乘的和。

    在Python中,求一个数的阶乘有多种方法,下面将详细讲解如何使用递归、循环以及内置模块来求解阶乘问题,并给出相应的代码实例。 递归方法 递归是编程中一种常见的解决问题的方法,它通过函数调用自身的方式,将大…

    2024年7月21日
    02

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息