算法基础:五大排序算法Python实战教程

简介: 排序是每个软件工程师和开发人员都需要掌握的技能。
TB1mkCpz4jaK1RjSZFAXXbdLFXa.jpg

本文为 AI 研习社编译的技术博客,原标题 :

A tour of the top 5 sorting algorithms with Python code

作者 | George Seif

翻译 | 邓普斯•杰弗

校对 | shunshun        整理 | 菠萝妹

原文链接:

https://medium.com/@george.seif94/a-tour-of-the-top-5-sorting-algorithms-with-python-code-43ea9aa02889

算法基础:五大排序算法Python实战教程

TB1I26XABLoK1RjSZFuXXXn0XXa.jpg

排序算法的复杂度

排序是每个软件工程师和开发人员都需要掌握的技能。不仅要通过编程面试,还要对程序本身有一个全面的理解。不同的排序算法很好地展示了算法设计上如何强烈的影响程序的复杂度、运行速度和效率。

让我们看一下前6种排序算法,看看如何在Python中实现它们!

  冒泡排序

冒泡排序通常是在CS入门课程中教的,因为它清楚地演示了排序是如何工作的,同时又简单易懂。冒泡排序步骤遍历列表并比较相邻的元素对。如果元素顺序错误,则交换它们。重复遍历列表未排序部分的元素,直到完成列表排序。因为冒泡排序重复地通过列表的未排序部分,所以它具有最坏的情况复杂度O(n^2)。

TB1J8HEAxnaK1RjSZFtXXbC2VXa.gif TB1ZR_dApYqK1RjSZLeXXbXppXa.png

  选择排序

选择排序也很简单,但常常优于冒泡排序。如果您在这两者之间进行选择,最好默认选择排序。通过选择排序,我们将输入列表/数组分为两部分:已经排序的子列表和剩余要排序的子列表,它们构成了列表的其余部分。我们首先在未排序的子列表中找到最小的元素,并将其放置在排序的子列表的末尾。因此,我们不断地获取最小的未排序元素,并将其按排序顺序放置在排序的子列表中。此过程将重复进行,直到列表完全排序。

TB1wbjEAxjaK1RjSZKzXXXVwXXa.gif TB1fsveAAvoK1RjSZPfXXXPKFXa.png

  插入排序

插入排序比冒泡排序和选择排序既快又简单。有趣的是,有多少人在玩纸牌游戏时会整理自己的牌!在每个循环迭代中,插入排序从数组中删除一个元素。然后,它在另一个排序数组中找到该元素所属的位置,并将其插入其中。它重复这个过程,直到没有输入元素。

TB1pdLlAsfpK1RjSZFOXXa6nFXa.gif TB110TiAxTpK1RjSZFMXXbG_VXa.png

  归并排序

归并排序是分而治之算法的完美例子。它简单地使用了这种算法的两个主要步骤:

(1)连续划分未排序列表,直到有N个子列表,其中每个子列表有1个“未排序”元素,N是原始数组中的元素数。

(2)重复合并,即一次将两个子列表合并在一起,生成新的排序子列表,直到所有元素完全合并到一个排序数组中。

TB1IcveAAvoK1RjSZPfXXXPKFXa.gif TB1stvhAAvoK1RjSZFDXXXY3pXa.jpg

  快速排序

快速排序也是一种分而治之的算法,如归并排序。虽然它有点复杂,但在大多数标准实现中,它的执行速度明显快于归并排序,并且很少达到最坏情况下的复杂度O(n²) 。它有三个主要步骤:

(1)我们首先选择一个元素,称为数组的基准元素(pivot)。

(2)将所有小于基准元素的元素移动到基准元素的左侧;将所有大于基准元素的元素移动到基准元素的右侧。这称为分区操作。

(3)递归地将上述两个步骤分别应用于比上一个基准元素值更小和更大的元素的每个子数组。

TB1GTTXArPpK1RjSZFFXXa5PpXa.gif TB1B2_fApzqK1RjSZSgXXcpAVXa.png

  喜欢吗?

在Twitter上关注我,在那里我发布了最新最伟大的人工智能、技术和科学!

想要继续查看该篇文章相关链接和参考文献?

长按链接点击打开或点击【算法基础:五大排序算法python实战教程】:

https://ai.yanxishe.com/page/TextTranslation/1374

AI研习社每日更新精彩内容,观看更多精彩内容:雷锋网(公众号:雷锋网)雷锋网雷锋网

AI/机器学习年度2018年度进展综述

算法基础:五大排序算法Python实战教程

手把手:用PyTorch实现图像分类器(第一部分)

手把手:用PyTorch实现图像分类器(第二部分)

等你来译:

对混乱的数据进行聚类

初学者怎样使用Keras进行迁移学习 

强化学习:通往基于情感的行为系统 

一文带你读懂 WaveNet:谷歌助手的声音合成器

目录
相关文章
|
2月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
378 7
|
2月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
2月前
|
算法 数据可视化 测试技术
HNSW算法实战:用分层图索引替换k-NN暴力搜索
HNSW是一种高效向量检索算法,通过分层图结构实现近似最近邻的对数时间搜索,显著降低查询延迟。相比暴力搜索,它在保持高召回率的同时,将性能提升数十倍,广泛应用于大规模RAG系统。
220 10
HNSW算法实战:用分层图索引替换k-NN暴力搜索
|
2月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
122 12
|
2月前
|
机器学习/深度学习 缓存 算法
微店关键词搜索接口核心突破:动态权重算法与语义引擎的实战落地
本文详解微店搜索接口从基础匹配到智能推荐的技术进阶路径,涵盖动态权重、语义理解与行为闭环三大创新,助力商家提升搜索转化率、商品曝光与用户留存,实现技术驱动的业绩增长。
|
2月前
|
存储 数据采集 监控
Python文件操作全攻略:从基础到高级实战
本文系统讲解Python文件操作核心技巧,涵盖基础读写、指针控制、异常处理及大文件分块处理等实战场景。结合日志分析、CSV清洗等案例,助你高效掌握文本与二进制文件处理,提升程序健壮性与开发效率。(238字)
354 1
|
2月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
304 0
|
2月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
2月前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
397 0
|
数据可视化 IDE 开发工具
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
997 13

热门文章

最新文章

推荐镜像

更多