摘要:在编程里,排序是一个重要算法,它可以帮助我们更快、更容易地定位数据。在这篇文章中,我们将使用排序算法分类器对我们的数组进行排序,了解它们是如何工作的。

本文分享自华为云社区《Python 排序算法指南》,原文作者:唐里 。

在编程里,排序是一个重要算法,它可以帮助我们更快、更容易地定位数据。在这篇文章中,我们将使用排序算法分类器对我们的数组进行排序,了解它们是如何工作的。为了保障本文的可读性,这里只着重介绍4个排序算法。

  • 冒泡排序
  • 插入排序.
  • 归并排序.
  • 快速排序

冒泡排序

冒泡排序是一种简单的排序算法,它比较两个相邻对象的顺序,将非预期顺序的相邻对象位置交换。下面是它的工作步骤:

  • 比较第一个和第二个对象,如果第一个大于第二个,将之交换。
  • 将第二个对象和第三个对象进行比较,检查相同条件。以此类推直到比较到数组最后一个数。
  • 重复执行这个过程,这样数组就按照从左到右从小到大排列了。

代码如下

# Python中的冒泡排序
def bubbleSort(array):# 外循环访问数组的每个元素for i in range(len(array)):# 内循环将数组元素与外循环迭代元素进行比较for j in range(0, len(array) - i - 1):# 比较两个相邻元素if array[j] > array[j + 1]:# 如果元素不是预期顺序则交换元素temp = array[j]array[j] = array[j+1]array[j+1] = temp
data = [5, 4, 3, 2, 1]bubbleSort(data)
print('Sorted Array')
print(data)#output: [1, 2, 3, 4, 5]

插入排序

插入排序也很简单,它分为已经排序和未排序两部分,将未排序部分的元素选中后正确放置在排序部分即可。类似卡牌游戏时我们手里有分类卡。下面是它的工作步骤:

  • 遍历数组查找最低元素的索引并将其与数组的第一个元素交换。
  • 找到数组(不包括第一个元素)中另一个最低的元素,并将其与第二个元素交换 ,然后重复操作,直到数组的最后一个元素。
  • 这样,数组中最低的元素都会移到左边,而最大的元素会在数组的右边,因此数组是有序的。

代码如下

# Python中的排序算法
def insertionSort(array):for step in range(1, len(array)):key = array[step]j = step - 1# 将键与其左侧的每个元素进行比较,直到找到小于它的元素while j >= 0 and key < array[j]:array[j + 1] = array[j]j = j - 1# 将键放在比它小的元素之后。array[j + 1] = keydata = [11, 4, 3, 2, 12]insertionSort(data)
print("sorted array")
print(data)#output: [2, 3, 4, 11, 12]

归并排序

归并排序是基于分治算法原理的最常用的排序算法。我们将数组分为多个部分,然后对他们进行排序,最后将子部分合并为一个排序数组,为了更好的理解,下面是它的工作步骤:

  • 把数组分成小块,直到每一块中没有单独的元素。
  • 比较每一块数组,将最小值放在左侧,最大值放在数组的右侧。
  • 如果觉得很难理解,看看这个动图。

代码如下

# Python的归并排序
def mergeSort(array):if len(array) > 1:#  r 是将数组分为两半后的分割点r = len(array)//2L = array[:r]M = array[r:]# 通过递归方法对两半进行排序mergeSort(L)mergeSort(M)i = j = k = 0# 直到我们到达 L 或 M 的任一端,从中选择较大的元素 L 和 M 并将它们放置在 A[p 到 r] 处的正确位置while i < len(L) and j < len(M):if L[i] < M[j]:array[k] = L[i]i += 1else:array[k] = M[j]j += 1k += 1# 将L或者M里的元素排序好后,将剩余的元素并放入 A[p to r]while i < len(L):array[k] = L[i]i += 1k += 1while j < len(M):array[k] = M[j]j += 1k += 1
array = [8, 6, 14, 12, 10, 3]mergeSort(array)
print("Sorted array: ")
print(array)#output: [3, 6, 8, 10, 12, 14]

快速排序

与归并排序一样,快速排序也是基于分治算法的原理的一种排序算法。它选择一个元素作为枢轴,并围绕枢轴分区数组。下面是它的工作步骤:

  • 选择一个转折点,这可以是随机选择的。这里假设我们选择数组的最后一个元素作为轴心。
  • 将所有小于轴心的项目放在左侧,大于轴心的项目放在数组右侧。
  • 在枢轴的左右两侧重复上面的步骤。

# Python中的快速排序
# 找到分区位置
def partition(array, lowest, highest):# 这里我们选择最右的元素作为枢轴pivot = array[highest]# 为最大的元素设置指针i = lowest - 1# 将每个元素与枢轴元素对比for j in range(lowest, highest):if array[j] <= pivot:i = i + 1# 将 i 处的元素与 j 处的元素交换(array[i], array[j]) = (array[j], array[i])# 将枢轴元素与 i 指定的较大元素交换(array[i + 1], array[highest]) = (array[highest], array[i + 1])# 返回分区完成的位置return i + 1
def quickSort(array, lowest, highest):if lowest < highest:# 找到枢轴元素# 小于枢轴的元素放左边# 大于枢轴的元素放右边pi = partition(array, lowest, highest)# 枢轴左侧的递归调用quickSort(array, lowest, pi - 1)# 枢轴右侧的递归调用quickSort(array, pi + 1, highest)
array = [9, 8, 3, 2, 1, 10, 7, 6, 19]size = len(array)
quickSort(array, 0, size - 1)
print('Sorted Array is below')
print(array)#output [1, 2, 3, 6, 7, 8, 9, 10, 19]

以上就是本文的全部内容,感谢阅读,如果对你有帮助希望点个赞~

原文地址:https://python.plainenglish.io/a-guide-to-sorting-algorithms-in-python-dfa9436b8527

点击关注,第一时间了解华为云新鲜技术~

带你掌握4种Python 排序算法相关推荐

  1. 3min利用Python实现9种经典排序算法可视化!(附源代码)

    来源:恋习Python 本文附视频,建议收藏. 本文为你分享实现9种经典排序算法可视化的方法,3分钟即可实现. [导 读]近在某网站上看到一个视频,是关于排序算法的可视化的,看着挺有意思的,也特别喜感 ...

  2. 3分钟快速实现:9种经典排序算法的可视化

    作者 | 爱笑的眼睛 来源 | 恋习Python(ID:sldata2017) 最近在某网站上看到一个视频,是关于排序算法的可视化的,看着挺有意思的,也特别喜感. ▼ 6分钟演示15种排序算法 不知道 ...

  3. Python排序算法总结

    Python排序算法总结 递归 在正式讲算法之前,先介绍一下递归.递归是一种解决问题的思路. 特点 调用自身 必须有一个明确的结束条件,比如if... 递归的两个阶段: 递推(压栈):到某个阶段,该阶 ...

  4. Python排序算法[二]:测试数据的迷雾散去

    算法试验中不仅仅要尝试使用不同的写法,更要注意测试所用数据的规律性,它们都会直接影响测试结果. 在上一篇文章<Python 排序算法[一]:令你茅塞顿开,却又匪夷所思>中我们学习了排序算法 ...

  5. python排序算法——归并排序(附代码)

    python排序算法 --归并排序 文章目录 python排序算法 --归并排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...

  6. python排序算法 ——冒泡排序(附代码)

    python排序算法 --冒泡排序 文章目录 python排序算法 --冒泡排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...

  7. python排序算法——希尔排序(附代码)

    python排序算法--希尔排序 文章目录 python排序算法--希尔排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序算法 ...

  8. python排序算法——插入排序

    python排序算法--插入排序 文章目录 python排序算法--插入排序 一.前言 二.描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序算法是指 ...

  9. 算法:三种简单排序算法

    排序算法比較常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和高速排序算法等. 今天先学习一下前面三种比較简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等.排 ...

最新文章

  1. 车牌识别的分类器文件目录
  2. 名词解释说明用英语怎么说_“用英语怎么说”译成How to say in English,典型的中式英语!...
  3. 基础数据仓库环境搭建(二) Hadoop的环境搭建
  4. java的poi导出Excel文件
  5. tomcat Connector 连接器
  6. java 进程同步代码_java 实现进程间的同步(源代码)
  7. Android 获取ROOT权限原理解析
  8. php软件开发--oop(面向对象)
  9. SqlServer性能检测之Sql语句排查
  10. 神奇的python系列11:函数之生成器,列表推导式
  11. Yii Framework2.0开发教程(6)数据库mysql--ActiveRecord
  12. macOS 应用程序dmg 已损坏无法打开解决办法
  13. 科普│串联质谱分析仪(ESI离子源)之离子阱质谱仪
  14. 启发式搜索算法 - 以A*为中心来说明启发式算法本质是要找有效的heuristic需要满足的性质
  15. python重量转换程序_重量转换的极小项目说python查找字符串
  16. OCAD应用:光楔初始设计
  17. c语言编程编写计算器图形,c语言编写的图形计算器.DOC
  18. HTML 渲染组件出错,这个问题可以通过安装某个缺失组件来解决。您是否想要了解详细信息? 的解决办法
  19. html标签的记忆巧法,分类记忆HTML标签
  20. 2013年中国android智能手机用户调查研究报告,ZDC:2013年7月中国智能手机市场分析报告...

热门文章

  1. js 和 css动画
  2. Bootstrap Page header
  3. c语言prog1已停止工作,1.在考生文件夹下,要求程序PROG.C的功能是.doc
  4. android 删除wifi文件在哪里设置,如何删除无线终端的无线配置文件
  5. 利用openpyxl模块来操作Excel
  6. Virtualenv 相关
  7. POJ 3667 Hotel 线段树区间合并
  8. Spring整合Hibernate(2)
  9. leetcode 746 python 动态规划
  10. mysql安全性特点_MySQL数据库有哪些特点?为何能得到了广泛应用?