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

快速排序(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的算法该如何发挥到最大的价值呢?SEO的哪些算法对网站的自然排名有比较大的影响?今天小编就和我们一起来聊一聊这行的内容吧。 SEO的哪些算法对网站的自…

    2022年10月30日
    021
  • 小编分享建立网站企业品牌为什么那么重要。

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

    2022年11月14日
    01
  • 百度绿萝算法针对网站哪些问题

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

    2022年5月21日
    0292
  • 六个方向谈谈国内SEO优化的发展现状

    其实有挺多 SEOer 或是站长朋友们并不是很了解国内SEO 优化的发展现状,有人为很好的,也有认为没什么意思的,总之有说不完的各种各样的看法。当然,不能否定的是,有人分析的还是挺有依据的,今天挤点时间谈谈自己…

    2022年5月24日
    0200
  • AES加解密算法怎么实现。

    AES加解密算法是一种对称加密算法,广泛应用于数据加密和保护领域,它被广泛用于许多安全协议中,如SSL/TLS、IPsec等,下面将详细介绍AES加解密算法的实现过程。 1. 密钥生成: 需要生成一个密钥,AES算法支持128位…

    2024年6月14日
    00
  • 小编分享python怎么求阶乘的和。

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

    2024年7月21日
    00
  • 教你Zookeeper Znode实例分析。

    Zookeeper是一个分布式协调服务,它提供了一种简单的、高性能的、可靠的分布式协调机制,在Zookeeper中,Znode是一种特殊的节点,它可以用来存储数据、配置信息等,本文将对Zookeeper中的Znode实例进行分析。 1. Zn…

    2024年6月13日
    00
  • 教你如何提高seo优化用户网站的体验。

    如何提高seo优化用户网站的体验? 在我们谈论搜索引擎算法的同时,SEO优化人员,经常列举大量的百度算法,用于强调目前百度搜索的线上操作规范,这是一个非常好的习惯。 比如: ①惊雷算法:告知你不要尝试利用刷IP…

    2022年11月14日
    00

联系我们

QQ:951076433

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