冒泡排序python编写_十大排序算法(1)之冒泡排序python实现

冒泡排序python编写_十大排序算法(1)之冒泡排序python实现冒泡排序 BubbleSort 一 什么是冒泡排序冒泡排序是一种简单的排序算法 其基本思想是 两两比较相邻元素的大小 若两元素反序 则交换两元素位置 直至没有反序为止 假设从小到大排序 两两比较之后 较大的慢慢往后排 较小的数慢慢往前排 最终完成从小到大的排序 这个过程类似于水中冒泡 所以叫冒泡排序 二 算法的基本描述假设有 n n gt 1 个元素需要按从小到大顺序排列 冒泡排序算法如下 第一次

冒泡排序(Bubble Sort)

一、什么是冒泡排序

冒泡排序是一种简单的排序算法。其基本思想是:两两比较相邻元素的大小,若两元素反序,则交换两元素位置,直至没有反序为止。

假设从小到大排序,两两比较之后,较大的慢慢往后排,较小的数慢慢往前排,最终完成从小到大的排序。这个过程类似于水中冒泡,所以叫冒泡排序。

二、算法的基本描述

假设有n(n>1)个元素需要按从小到大顺序排列,冒泡排序算法如下:

第一次遍历:

1、比较第1个元素与第2个元素的大小,若第1个元素大于第2个元素,则交换两者位置;若第1个元素小于等于第2个元素,则不交换位置;

2、接着比较交换后第2个元素和第3个元素的大小并按结果交换位置;依次比较相邻元素直至第(n-1)个元素和第n个元素完成比较及位置交换,总计比较(n-1)次,将最大值放在序列最末位;

第二次遍历:

将第二大的元素放在倒数第二位;

… …

第(n-1)次遍历:

完成序列从小到大排序

三、算法举例

假设用冒泡排序算法给序列[11,3,36,60,72,38,56]进行排序,其过程如下:冒泡排序python编写_十大排序算法(1)之冒泡排序python实现第一次遍历:比较6次(即n-1),将最大数72放到末尾;

第二次遍历:比较5次(即n-2),将60放到倒数第二位;

… …

第六次遍历:比较1次(即n-(n-1)),完成序列排序,即:[3,11,36,38,56,60,72]

四、算法时间复杂度从上边举例可以发现,冒泡算法完成排序需要进行的;两两比较的次数总计为:

Sum=(n-1)+(n-2)+(n-3)+… … +2+1=n(n-1)/2=O(n2)

当n较大时,完成冒泡排序所需的两两比较次数就会很大,比较要完成100个数的从小到大排序,则需要计较;完成200个数的比较则需要19900次。因此,冒泡排序算法适合数据元素较少的排序,对于数据元素较多的排序,则会显著增加排序时间。

五、用python实现冒泡排序算法

算法如下:(从小到大排列)冒泡排序python编写_十大排序算法(1)之冒泡排序python实现

代码中,第二个for循环的范围为range(length-i-1),这是因为上一次循环已经将length-i-1之前的元素进行过排序了,避免重复无用的循环

运行结果如下:冒泡排序python编写_十大排序算法(1)之冒泡排序python实现

如果要实现从大到小排序,将代码中第15行的if array[j] > array[j+1]:改为

if array[j]

注:python实现冒泡排序算法原码

”’python实现冒泡排序算法原码”’

”’冒泡排序”’

def bubblesort(array):

length = len(array)

for i in range(length):

for j in range(length-i-1):

if array[j] > array[j+1]:

array[j+1], array[j] = array[j], array[j+1]

return array

list =[11,3,36,60,72,38,56]

list_sorted = bubblesort(list)

print(“冒泡排序结果:”,list_sorted)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220853.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午7:30
下一篇 2026年3月17日 下午7:30


相关推荐

  • 二叉树层序遍历Java版

    二叉树层序遍历Java版publicList<List<Integer>>levelOrder(TreeNoderoot){List<List<Integer>>result=newArrayList<>();if(root==null)returnresult;List<TreeNode>queue=newArrayList<>();queue.add(root);

    2022年5月21日
    40
  • itextpdf 超链接

    itextpdf 超链接itextpdf 超链接

    2026年3月17日
    2
  • docker部署服务器_docker服务启动

    docker部署服务器_docker服务启动部署Nginx寻找镜像dockersearchnginx:默认最新版官网查看不同的版本信息下载镜像dockerpullnginx[root@iZwz9hv1phm24s3jicy8x1Z~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEnginxlatest605c77e624dd3monthsago141MBcentos.

    2022年10月9日
    4
  • C++封装继承多态理解

    C++封装继承多态理解面向对象的三个基本特征 封装 继承 多态简单概括三大特性作用 封装是为了代码模块化和增加安全性继承是为了重用和扩展现有的代码模块多态是为了接口复用封装 保护数据成员 不让类以外的程序直接访问或者修改类的成员 只能通过其成员对应方法访问 即数据封装 隐藏方法实现的具体细节 仅仅提供接口 内容修改不影响外部调用 即方法封装 继承 三种继承方式 public protected private 继承的

    2026年3月20日
    2
  • Linux/Android 音频驱动从概念到 APP

    Linux/Android 音频驱动从概念到 APP这里写自定义目录标题前言硬件介绍 Codec 通用结构 ADC 框图 DAC 框图常用数字接口其他相关术语 Codec 实际结构硬件原理图芯片手册框图软硬件对应示例 Codec 硬件逻辑 CodecLinux 抽象软件介绍 LinuxAlsa 框架框架图设备中的文件结构 Linux 相关代码路径标准 Alsa 驱动编写编写标准 Alsa 驱动流程代码示例 KernelAlsa soc 框架及程序编写针对硬件框架

    2026年3月20日
    2
  • OCP-1Z0-051-名称解析-文章12称号

    OCP-1Z0-051-名称解析-文章12称号

    2022年1月12日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号