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

这篇具有很好参考价值的文章主要介绍了python排序算法 ——冒泡排序(附代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python排序算法 ——冒泡排序



一、前言

相关知识来自《python算法设计与分析》。初级排序算法是指几种较为基础且容易理解的排序算法。初级排序算法包括插入排序、选择排序和冒泡排序3种。虽然它们的效率相对于高级排序算法偏低,但是在了解初级排序算法之后,再去学习相对复杂的高级排序算法会容易许多。本文介绍冒泡排序。

二、算法描述

冒泡排序采用重复遍历数组并依次比较相邻元素的方法来排序。由于在冒泡算法进行排序的过程中,最大数/最小数会慢慢“浮”到数组的末尾,所以算法由此命名。

冒泡排序的平均时间复杂度是O(n2),最好情况下的时间复杂度是O(n),最坏情况下的时间复杂度是O( n2 )。空间复杂度是O(1)。冒泡排序算法是一个稳定的排序算法。冒泡排序的过程同样可以用图说明。我们的目标还是把无序数组以从小到大的顺序排列。

首先,我们从第一个数开始遍历,如图2-14所示。将第一个数与它后面的元素进行对比,发现后面的元素比它小。

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

这时,我们需交换这两个元素的值,如图2-15所示。

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

接下来遍历到的是第二个元素。如图2-16所示,此时第二个元素的值已经变为5。把它和它后方的元素6对比,发现5和6的排列顺序已经是正确的(前面的数小于后面的数),这时候不用交换这两个元素的值,直接继续遍历。

python排序算法 ——冒泡排序(附代码)
如图2-17所示,遍历到第三个元素时,发现它比后面的元素更大,这时,继续交换这两个元素的值。

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

如图2-18所示,在类似的一系列操作后,数组中的最大值被交换到了数组中的最后一个(第8个)位置上。
python排序算法 ——冒泡排序(附代码)
如图2-19所示,我们可以确定末尾元素的值是正确的,所以接下来我们只需要对第1~7个位置上的元素再进行遍历。

python排序算法 ——冒泡排序(附代码)
在对第1~7个位置上的元素进行遍历之后,我们可以确定排在第7位的数。同理,在对第1~6个位置上的元素、第1~5个位置上的元素等进行遍历后,我们可以确定数组中排在第6位、第5位的数等。冒泡排序的剩下过程如图2-20所示。
python排序算法 ——冒泡排序(附代码)
但是,我们发现,在排好第5个数之后,整个数组的排序就已经完成了,在接下来的遍历中不会再产生元素的交换。这时,我们可以直接结束遍历。

三、代码实现

了解了冒泡排序的流程之后,我们再来看看冒泡排序的代码。

冒泡排序的代码:

nums = [5,3,6,4,1,2,8,7]
for i in range(len(nums),0,-1):  #更新本趟遍历确定的元素位置
  flag = 0           #flag用于标记是否有元素交换发生
  for j in range(i-1):      #遍历未排序的数组
    if nums[j]>nums[j+1]:
      nums[j],nums[j+1] = nums[j+1],nums[j]
      flag = 1 #标记存在元素交换
  if not flag:
    break     #如果本趟遍历没有发生元素交换,直接跳出循环
print(nums)

运行程序,输出结果为:

[1,2,3,4,5,6,7,8]

这段冒泡排序的代码中使用了两个for循环。外层for循环中的i代表每一次遍历后确定位置的元素的下标。

变量flag用于记录是否有元素交换发生,初始为0,在遍历开始后,一旦两个元素进行交换,它的值就会变为1。

随后,再用一个for循环对未排序数组进行遍历。为什么遍历的范围是range(i-1)?因为未排序数组的最后一个元素下标为i,而我们在遍历时要同时访问下标为j和j+1的元素。把遍历范围设为range(i-1),访问数组时才不会越界。另一个需要注意的点是交换元素的条件:num[j]>num[j+1]。注意不要把大于号写成大于等于号。当这两个元素相等时,为保留它们的原有相对位置,不要进行交换。如果把运算符写成大于等于号,排序算法的稳定性就被破坏了。

遍历结束后,如果flag的值仍然是0,那么说明在完整的一次遍历中没有元素交换发生,也就是说,所有元素都是有序排列的。这时就可以直接跳出循环,节省时间。


总结

以上就是今天要讲的内容,本文介绍了冒泡排序的理论知识和代码实现。冒泡排序的平均时间复杂度是O(n2),最好情况下的时间复杂度是O(n),最坏情况下的时间复杂度是O( n2 )。空间复杂度是O(1)。冒泡排序算法是一个稳定的排序算法。文章来源地址https://www.toymoban.com/news/detail-442655.html

到了这里,关于python排序算法 ——冒泡排序(附代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 跟着gpt学算法(c和python)-排序-冒泡排序

    排序算法是将一组数据按照特定规则进行排列的算法。排序算法可以按照不同的标准进行分类,比如稳定性、时间复杂度、空间复杂度等。以下是一些常见的排序算法: 冒泡排序(Bubble Sort):相邻元素进行比较,较大的元素逐渐\\\"冒泡\\\"到右侧,较小的元素逐渐\\\"沉\\\"到左侧。

    2024年02月16日
    浏览(34)
  • 【Python排序算法】一文掌握十大排序算法,冒泡排序、插入排序、选择排序、归并排序、计数排序、基数排序、希尔排序和堆排序

    目录 1 冒泡排序(Bubble Sort) 2 插入排序(Insertion Sort) 3 选择排序(Selection Sort) 4. 快速排序(Quick Sort) 5. 归并排序(Merge Sort) 6 堆排序 (Heap Sort) 7 计数排序 (Counting Sort) 8 基数排序 (Radix Sort) 9 希尔排序(Shell Sort) 10 桶排序     1 冒泡排序(Bubble Sort)        冒泡排序

    2024年02月08日
    浏览(55)
  • Python入门教程+项目实战-10.5节: 程序实战-冒泡排序算法

    目录 10.5.1 排序算法简介 10.5.2 冒泡排序算法 10.5.3 系统学习python 所谓排序,是指将数据集合中的元素按从小到大的顺序进行排列,或按从大到小的顺序进行排列。前者称为升序排序,后者称为降序排序。在数据结构与算法这门课程中,我们会学习到诸多与排序相关的算法,

    2023年04月21日
    浏览(44)
  • 排序算法大全:冒泡排序【含优化】,选择排序【含优化】,直接插入排序,希尔排序,堆排序,快速排序【含3种实现版本及非递归实现】,归并排序【含非递归实现】。详细图解,文字解释,代码实现,性能分析。

    目录  一、冒泡排序 1、冒泡排序思想 2、冒泡排序算法的性能分析 二、选择排序 1、选择排序思想 2、选择排序算法的性能分析   三、直接插入排序 1、直接插入排序思想 2、直接插入排序算法的性能分析 四、希尔排序 1、希尔排序思想 2、希尔排序算法的性能分析 五、堆排

    2024年02月20日
    浏览(58)
  • 【数据结构与算法】排序算法:冒泡排序,冒泡排序优化,选择排序、选择排序优化

    目录 一、冒泡排序 1、冒泡排序思想 2、冒泡排序算法的性能分析 代码实现: 二、选择排序 1、选择排序思想 2、选择排序算法的性能分析  代码实现: 1、冒泡排序思想 冒泡排序的基本思想是通过相邻元素之间的比较和交换来逐步将最大(或最小)的元素移到右边(或左边

    2024年01月19日
    浏览(50)
  • java冒泡排序(含冒泡排序代码)

    目录 一:冒泡排序思想 二:冒泡排序代码 三:结果  

    2024年02月14日
    浏览(44)
  • C++常见排序算法——冒泡排序算法

    首先说一下冒泡排序的基本算法思想: 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸

    2023年04月08日
    浏览(42)
  • 排序算法之二:冒泡排序

    冒泡排序是交换排序 基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 第一趟:将最大的值排到最后 第二趟:将次大的值排到倒

    2024年02月04日
    浏览(37)
  • 排序:冒泡排序算法分析

    基于“交换”的排序︰ 根据序列中两个元素的比较结果来对换这两个记录在序列中的位置。 交换排序包括 冒泡排序 和 快速排序 。 1.算法原理 从后往前(或从前往后)两两比较相邻元素的值, 若为逆序(即 A [ i − 1 ] A [ i ] A[i-1]A[i] A [ i − 1 ] A [ i ] ) ,则交换它们,直到

    2024年02月07日
    浏览(39)
  • 排序算法(1):冒泡排序

    (꒪ꇴ꒪ ),Hello我是 祐言QAQ 我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍 快上🚘,一起学习,让我们成为一个强大的攻城狮! 送给自己和读者的一句鸡汤🤔: 集中起来的意志可以击穿顽石! 作者水平很有限,如果发现错误,请在评论区指

    2024年02月12日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包