排序算法的巅峰之选:学习Python快速排序!

这篇具有很好参考价值的文章主要介绍了排序算法的巅峰之选:学习Python快速排序!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

快速排序(Quick Sort)是一种高效的排序算法,它的基本思想是通过分治的策略将一个大问题分解成小问题并解决。快速排序的核心操作是选取一个基准元素,将待排序序列划分成左右两部分,其中左部分的元素都小于基准元素,右部分的元素都大于基准元素。然后递归地对左右两部分进行排序,最终完成整个序列的排序。本文将详细介绍快速排序算法的原理和实现,并提供相关的Python代码示例。

一、算法原理

快速排序算法的步骤如下:

  1. 选择一个基准元素(通常选择第一个或最后一个元素)。
  2. 将序列划分成两部分,使得左部分的元素都小于基准元素,右部分的元素都大于基准元素。这个过程称为分区(Partition)。
  3. 对左右两部分递归地应用步骤1和步骤2,直到每个部分只剩下一个元素或为空。

快速排序的核心思想是通过不断地划分和排序子序列,最终完成整个序列的排序。

二、快速排序的实现

下面是使用Python实现快速排序算法的代码:


def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[0]  # 选择第一个元素作为基准元素
        less = [x for x in arr[1:] if x <= pivot]  # 小于等于基准元素的子序列
        greater = [x for x in arr[1:] if x > pivot]  # 大于基准元素的子序列
        return quick_sort(less) + [pivot] + quick_sort(greater)

# 测试代码
numbers = [4, 2, 6, 1, 3]
sorted_numbers = quick_sort(numbers)
print(sorted_numbers)  # 输出:[1, 2, 3, 4, 6]

在上述代码中,quick_sort()函数接受一个待排序的列表作为输入,并对列表进行快速排序。算法使用递归方式实现。首先选择列表的第一个元素作为基准元素(也可以选择最后一个元素),然后通过列表解析的方式将列表划分成两部分:小于等于基准元素的子序列和大于基准元素的子序列。最后,将子序列和基准元素合并起来,得到最终的排序结果。

三、算法分析

快速排序是一种原址排序算法,即在排序过程中直接修改原始列表,不需要额外的存储空间。快速排序的平均时间复杂度为O(nlogn),其中n是待排序序列的长度。在大多数情况下,快速排序是一种高效的排序算法。然而,在最坏情况下,即待排序序列已经有序或基本有序时,快速排序的时间复杂度为O(n^2),性能下降。
为了避免最坏情况的发生,可以采用一些优化方法,如随机选择基准元素、三数取中法选择基准元素、使用插入排序优化小规模数据等。

四、优化思路

优化1:随机选择基准元素

为了避免最坏情况的发生,可以随机选择基准元素。在每次分区时,随机选择一个元素作为基准元素,而不是固定选择第一个或最后一个元素。这样可以降低最坏情况发生的概率,提高算法的性能。


import random

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot_index = random.randint(0, len(arr) - 1)  # 随机选择一个索引作为基准元素的索引
        pivot = arr[pivot_index]
        arr[0], arr[pivot_index] = arr[pivot_index], arr[0]  # 将基准元素交换到第一个位置
        less = [x for x in arr[1:] if x <= pivot]
        greater = [x for x in arr[1:] if x > pivot]
        return quick_sort(less) + [pivot] + quick_sort(greater)

优化2:三数取中法选择基准元素

另一种优化方法是使用三数取中法选择基准元素。这种方法通过从待排序序列的首、尾和中间选择三个元素,并将它们排序后的中间元素作为基准元素,来降低最坏情况的概率。


def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        first = arr[0]
        last = arr[-1]
        mid = arr[len(arr) // 2]
        pivot = sorted([first, mid, last])[1]  # 选择三个元素排序后的中间元素作为基准元素
        pivot_index = arr.index(pivot)
        arr[0], arr[pivot_index] = arr[pivot_index], arr[0]
        less = [x for x in arr[1:] if x <= pivot]
        greater = [x for x in arr[1:] if x > pivot]
        return quick_sort(less) + [pivot] + quick_sort(greater)

优化3:使用插入排序优化小规模数据

对于小规模的数据,快速排序的性能可能不如插入排序。因此,可以设置一个阈值,当待排序序列的长度小于等于阈值时,使用插入排序来提高算法的性能。


def quick_sort(arr, threshold=10):
    if len(arr) <= threshold:
        return insertion_sort(arr)  # 使用插入排序进行优化
    else:
        # 正常的快速排序逻辑
        pivot_index = random.randint(0, len(arr) - 1)
        pivot = arr[pivot_index]
        arr[0], arr[pivot_index] = arr[pivot_index], arr[0]
        less = [x for x in arr[1:] if x <= pivot]
        greater = [x for x in arr[1:] if x > pivot]
        return quick_sort(less, threshold) + [pivot] + quick_sort(greater, threshold)

五、总结

本文介绍了快速排序算法的原理和实现,并提供了相关的Python代码示例。快速排序是一种高效的排序算法,在大多数情况下表现良好。然而,在最坏情况下,其性能可能下降。为了避免最坏情况的发生,可以采用随机选择基准元素和三数取中法选择基准元素的优化方法。另外,对于小规模的数据,可以使用插入排序进行优化。通过掌握快速排序的原理和优化思路,我们可以更好地理解和应用这一经典的排序算法。文章来源地址https://www.toymoban.com/news/detail-546533.html

到了这里,关于排序算法的巅峰之选:学习Python快速排序!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 软考知识点——常见算法策略、设计模式、常见排序算法

    软考知识点——常见算法策略、设计模式、常见排序算法

    目录 一、常见算法策略 二、设计模式 1.设计模式分类 2.创建型设计模式应用场景 3.结构型设计模式应用场景  4.行为型设计模式应用场景 三、常见排序算法 算法名称 关键点 特征 典型问题 分治法 递归技术 把一个问题拆分成多个小模块的相同子问题,一般可用递归解决。

    2024年02月07日
    浏览(11)
  • 巅峰对决:英伟达 V100、A100/800、H100/800 GPU 对比

    巅峰对决:英伟达 V100、A100/800、H100/800 GPU 对比

    近期,不论是国外的 ChatGPT,还是国内诸多的大模型,让 AIGC 的市场一片爆火。而在 AIGC 的种种智能表现背后,均来自于堪称天文数字的算力支持。以 ChatGPT 为例,据微软高管透露,为 ChatGPT 提供算力支持的 AI 超级计算机,是微软在 2019 年投资 10 亿美元建造一台大型顶尖超级

    2024年02月05日
    浏览(19)
  • 【100天精通Python】Day73:python机器学习入门算法详解与代码示例

    目录 1. 监督学习算法: 1.1 线性回归(Linear Regression): 1.2  逻辑回归(Logistic Regression): 1.3 决策树(Decision Tree): 1.4 支持向量机(Support Vector Machine): 1.5 随机森林(Random Forest):  2. 无监督学习算法:  2.1 聚类算法(Clustering): 2.2 主成分分析(PCA): 2.3 K均值聚

    2024年02月05日
    浏览(25)
  • python知识点100篇系列(5) -根据后缀名整理文件夹

    需求来了: 平常用浏览器在互联网下载的文件,一般都在一个“下载”文件夹内,里面的文件什么格式的都有,看着就很乱;所以看能不能给整理一下,这个活python可以干; 解决方案: 思路一、根据文件后缀名,归类文件,相同后缀名,放到同一个文件夹下; 主要用到os模

    2023年04月09日
    浏览(22)
  • python知识点100篇系列(11)-浮点数四舍五入的两种方法

    python知识点100篇系列(11)-浮点数四舍五入的两种方法

    Python 的四舍五入主要有两种方式; 内置函数 round(number[, ndigits]) 使用 Decimal 先说结论: 如果是对金额的四舍五入,不建议使用内置函数,原因如下: 使用round方法: python3中的round函数对浮点数进行四舍五入的规则: 参数ndigits 不为 0 的情况 如果保留位数的后一位小于等于

    2024年02月07日
    浏览(12)
  • 【算法Hot100系列】搜索旋转排序数组

    【算法Hot100系列】搜索旋转排序数组

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年01月21日
    浏览(15)
  • 【排序算法】快速排序的基本算法

            快速排序是应用最广泛的排序算法,流行的原因是它实现简单,适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多。快速排序引人注目的特点是原地排序,只需要一个很小的辅助栈,且将长度为N的数组排序所需时间和NlgN成正比。另外,快速排序

    2024年01月22日
    浏览(8)
  • Python的知识点运用-2(排序&&找差值及修正ts合成顺序)

    Python的知识点运用-2(排序&&找差值及修正ts合成顺序)

    本章内容,涉及到上一章的视频爬虫,但是问题不大。最主要还是基础内容。 基础内容:排序,找出缺失值。 学习本章的前,我是建议去跑一遍gitee上的代码的。 排序问题由来 视频获取后,根据命名,排序是错的。问题除了命名以外还有一个因素就是多线程并发的原因。

    2023年04月09日
    浏览(8)
  • 【排序算法】归并排序与快速排序

    【排序算法】归并排序与快速排序

           🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️小林爱敲代码       🛰️博客专栏:✈️ 算法训练笔记       🛰️社区 :✈️ 进步学堂       🛰️欢迎关注:👍点赞🙌收藏✍️留言 今天给大家分享两种排序,一种是

    2024年01月19日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包