Python冒泡排序算法

2023-10-26

Num01–>冒泡排序定义

冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序算法的运作如下:
1、比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。

2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

3、针对所有的元素重复以上的步骤,除了最后一个。

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

Num02–>冒泡排序详细分析过程

交换过程图示(第一次):
这里写图片描述

那么我们需要进行n-1次冒泡过程,每次对应的比较次数如下图所示
这里写图片描述

Num03–>采用Python语言实现

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : xiaoke


def bubble_sort(alist):
    # 结算列表的长度
    n = len(alist)
    # 外层循环控制从头走到尾的次数
    for j in range(n - 1):
        # 用一个count记录一共交换的次数,可以排除已经是排好的序列
        count = 0
        # 内层循环控制走一次的过程
        for i in range(0, n - 1 - j):
            # 如果前一个元素大于后一个元素,则交换两个元素(升序)
            if alist[i] > alist[i + 1]:
                # 交换元素
                alist[i], alist[i + 1] = alist[i + 1], alist[i]
                # 记录交换的次数
                count += 1
        # count == 0 代表没有交换,序列已经有序
        if 0 == count:
            break


if __name__ == '__main__':
    alist = [54, 26, 93, 77, 44, 31, 44, 55, 20]
    print("原列表为:%s" % alist)
    bubble_sort(alist)
    print("新列表为:%s" % alist)

    # 结果如下:
    # 原列表为:[54, 26, 93, 77, 44, 31, 44, 55, 20]
    # 新列表为:[20, 26, 31, 44, 44, 54, 55, 77, 93]

Num04–>冒泡排序时间复杂度

最优时间复杂度:O(n) (表示遍历一次发现没有任何可以交换的元素,排序结束。)

最坏时间复杂度:O(n^2)

稳定性:稳定

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python冒泡排序算法 的相关文章

随机推荐

  • 光通量发光强度照度亮度关系_照度、发光强度、光通量之间是什么关系

    我们发现有不少朋友对照度 发光强度和光通量这三个概念之间的关系总是搞混淆 包括他们各自的含义 以及标识单位 这里 我们就系统的来解读一下 首先 我们来看一下三者各自的名词解释 光通量 照度 亮度的关系 1 照度 也称光照度 指的是某光源照射
  • JS 如何判断当前页面是否全屏

    点击事件 span class iconfont icon quanping1 span js 代码 fullscreenchange fullScreen 被弃用 const isFullScreen document fullScree
  • 二级建造师继续教育留念

    35 下列关于地方性法规 规章之间冲突时的法律适用 表述正确的是 A 地方性法规 规章之间不一致时 由有关机关依照下列规定的权限作出裁决 B 地方性法规与部门规章之间时同一事项的规定不一致的 由国务院裁决 C 部门规章之间对同一事项的规定不
  • 超级炫酷的决策树可视化R包

    决策树的可视化我们之前介绍过 主要是使用rpart plot包 视觉效果还是不错的 mlr3 模型评价 今天再给大家介绍一个更加花里胡哨的R包 treeheatr 安装 install packages treeheatr install
  • centos7 安装docker

    1 检查linux内核版本 要求版本高于3 10 uname r 2 安装辅助工具 yum install y yum utils device mapper persistent data lvm2 3 设置docker的yum源 sud
  • 什么是测试用例?如何设计?

    在学习或者实际的测试工作中经常都会提到 测试用例 这个词 没错 测试用例是测试工作的核心 不管要做的是什么样的测试 在真正动手执行测试之前 我们都需要先根据软件需求来设计测试用例 之后再依据设计好的测试用例 展开测试工作 那么问题来了 什么
  • 制作Station主机的Armbian启动卡

    Station主机支持很多种操作系统 烧录系统可以连接电脑进行线刷 也可以制作TF卡启动卡 方便系统的切换 本文介绍了制作Armbian启动卡的方法 见视频 视频演示 通过TF卡启动的时候需要先擦除EMMC里面的系统或者暂时拆掉EMMC模块
  • 年底裁员潮,你有没有被"N+1"?

    2018年11月28日上午 前一天加班到深夜的李女士 又一大早起床匆匆赶去上班了 她在一家垂直电商公司工作多年 岁末将至 一切和往常一样 为了在年前完成比上一季度更高的 KPI 她所在团队经常通宵达旦赶工 李女士准备开始新一天的鸡血工作 主
  • 【学习体会】SIMD256技术 & AVX2指令集 & 使用immintrin的api和数据结构编写测试实例 & immintrin的api解析

    目录 SIMD256技术 AVX2指令集 C 的immintrin库 使用immintrin的api和数据结构 举个例子 计算pi immintrin的api解析 mm256 set1 pd mm256 set pd mm256 setze
  • 业务中台、技术中台、数据中台、AI中台

    中台是一种体系 生态 方法论 有标准和机制 解决顶层领域下各业务子域的高效协同和资源复用问题 中台建设强调企业级 IT部门与业务部门协同建设 各部门 各业务域是中台能力的使用方 同时也是中台能力的重要提供方 目前网上比较主流的中台定义和分类
  • 应聘者是以前上司,能力一般,职场老白兔,本不想给他通过,但他卑微哀求,怎么办?...

    什么是现世报 大概就是下面这个程序员分享的职场故事了 昨天做了一场特殊的面试 应聘者是以前的上司 面试前知道是他 但他不知道面试官是自己 今天早晨收到他发来的信息 很犹豫 因为他能力一般 典型职场老白兔 不太想用他 但又因为他的卑微而不忍
  • Linux 关中断 与 开中断

    如果你要禁止所有的中断该怎么办 在2 6内核中 可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理 这两个函数定义在
  • LVGL使用Visual Studio仿真(release-v8.3版本)

    1 下载安装Visual Studio 在Microsoft官网下载Visual Studio的免费社区版即可 安装时勾选 使用c 的桌面开发 后 设置软件的安装和文件的保存路径即可 2 下载lvgl模拟工程 下载模拟工程不要下载maste
  • 区块链爆发,以太坊客户端还HOLD住吗?

    以太坊网络现在有24 270种代币 27 358笔交易等待转账 463 713个电子猫 数据截止发文时间 2018年1月19日 以太坊最近主持了很多活动 很多加密货币的爱好者认为这是个积极的信号 因为以太坊网络的使用率大增 历史更加长远并且
  • 服务器虚拟化 一虚多,服务器虚拟化多虚一

    服务器虚拟化多虚一 内容精选 换一换 虚拟IP Virtual IP Address 简称VIP 是一个未分配给真实弹性云服务器网卡的IP地址 弹性云服务器除了拥有私有IP地址外 还可以拥有虚拟IP地址 用户可以通过其中任意一个IP 私有I
  • Vue 和 React 的diff有什么不同

    作为前端广受欢迎的两个框架 React 和 Vue 几乎是面试必考的内容 特别是到了中高级前端岗 企业需要考察你对两个框架的应用 也会从源码层面考察你对框架的掌握程度 比如 Computed 属性为什么能够在依赖改变的时候 自己发生变化 V
  • 处世手册

    前言编译说明 处世手册 由两部世界经典名著组成 一部分是 智慧书 占全书内容的一半多一点点 是本书的基本内容 另一部分是 伊索寓言 占全书内容的一半少一点点 是本书的辅助内容 智慧书 的作者是巴尔塔沙 葛拉西安 1601 1658 西班牙人
  • Arduino多串口通信分离字符串最简单有效的方法

    本方法简单明了 经过本人的实际运行测试 用一个字形容perfect 串口1接收字符串格式为435 25 25 分号是分隔符 一个整型 一个浮点型 这两个数据是UNO上的传感器采集的数据 是变量 通过软件串口发送给上位机 这里是上位机的代码
  • DNS域名解析服务

    目录 前言 1 DNS系统的作用 1 1DNS系统的作用 1 2缓存域名服务器 1 3DNS系统类型 2 BIND的相关配置 3 两种查询方式 4 反向解析 5 DNS主从服务器及自动同步 6 DNS分离解析 前言 1 BIND域名服务基础
  • Python冒泡排序算法

    Num01 gt 冒泡排序定义 冒泡排序 英语 Bubble Sort 是一种简单的排序算法 它重复地遍历要排序的数列 一次比较两个元素 如果他们的顺序错误就把他们交换过来 遍历数列的工作是重复地进行直到没有再需要交换 也就是说该数列已经排