排序算法介绍(二)冒泡排序
0. 简介
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
1. 冒泡排序实现
冒泡排序的基本思想:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡排序过程演示:

2. 冒泡排序时间复杂度和空间复杂度分析
冒泡排序的时间复杂度和空间复杂度如下:
-
时间复杂度:
- 最坏情况(逆序):比较和交换次数均为 n*(n-1)/2,所以时间复杂度是 O(n^2)。
- 最好情况(已排序):只需要进行 n-1 次比较,所以时间复杂度是 O(n)。
- 平均情况:时间复杂度是 O(n^2)。
-
空间复杂度:
- 冒泡排序是原地排序,只需要一个额外空间用于临时交换元素,所以空间复杂度是 O(1)。
冒泡排序的平均和最坏情况时间复杂度都是 O(n^2),空间复杂度是 O(1)。
3. 冒泡排序C语言代码
C代码:
#include <stdio.h> void bubbleSort(int arr[], int n) { int i, j, temp; for (i = 0; i < n-1; i++) { // 外层循环控制排序趟数 for (j = 0; j < n-i-1; j++) { // 内层循环控制每一趟排序多少次 if (arr[j] > arr[j+1]) { // 如果前一个元素大于后一个元素,交换它们的位置 temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } }
} int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; // 待排序的数组 int n = sizeof(arr)/sizeof(arr[0]); // 数组的长度 bubbleSort(arr, n); // 对数组进行冒泡排序 printf("Sorted array: \n"); for (int i=0; i < n; i++) { // 输出排序后的数组 printf("%d ", arr[i]); } printf("\n"); return 0;
}
代码解释:
bubbleSort函数接收一个整数数组和它的长度作为参数。- 外层循环负责保证排序的趟数。例如,有7个数字,就需要排序6趟。
- 内层循环负责每一趟中的具体比较和交换操作。每一次内层循环都会确保当前未排序部分的最大值移到正确的位置。
- 当内层循环结束后,最大的数已经被放到了正确的位置,所以外层循环的每次迭代都会减少内层循环的次数。
4. 运行结果
代码运行结果:

相关文章:
排序算法介绍(二)冒泡排序
0. 简介 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排…...
搜索引擎高级用法总结: 谷歌、百度、必应
搜索引擎高级用法总结: 谷歌、百度、必应 google search 基本搜索 逻辑与:and逻辑或: or逻辑非: -完整匹配:“关键词”通配符:* ?高级搜索 intext:后台登录 将只返回正文中包含 后台登录 的网页 intitle intitle:后台登录 将只返回标题中包含 后台登录 的网页,intitle…...
com.intellij.openapi.application.ApplicationListener使用
一般监听期通过如下代码生效 <applicationListeners> <!-- <listener class"com.itheima.taunt.MyApplicationListener"--> <!-- topic"com.intellij.openapi.application.ApplicationListener"…...
常见js hook脚本
一.js hook 过无限debugger var _constructor constructor; Function.prototype.constructor function(s) {if (s "debugger") {console.log(s);return null;}return _constructor(s); }//去除无限debugger Function.prototype.__constructor_back Function.pro…...
Java——SpringLayout弹簧布局
import java.awt.*;import javax.swing.*;public class a {public static void main(String[] args) {new a();}public a() {JFrame JF new JFrame("弹簧布局");// 创建JFrame窗口//设置JPanel的布局管理器为SpringLayoutJPanel JP new JPanel(new SpringLayout())…...
正则表达式及文本三剑客grep sed awk
目录 正则表达式 1.元字符 2.表示次数 3.位置锚定 4.分组或其他 grep sed 语法: 常用选项 脚本格式 例: 查找11点56到12点10的日志 修改文件,找到文件并给其后缀加上er 提取IP地址 提取版本号 提取文件权限 awk 工作原理&…...
python爬虫之创建属于自己的ip代理池
在后续需求数据量比较大的情况下,自建一个ip代理池可以帮助我们获得更多的数据。 下面我来介绍一下整个过程 1.找到目标代理网站 https://www.dailiservers.com/go/webshare https://proxyscrape.com/ https://spys.one/ https://free-proxy-list.net/ http://fr…...
又添三位“信伙伴”,亚信安慧AntDB数据库与南京一鸣、广东鸿数、北京数见完成兼容互认
近日,亚信安慧AntDB数据库与南京一鸣科技有限公司(简称:南京一鸣)学生工作管理与服务平台软件、广东鸿数科技有限公司(简称:广东鸿数)隐私数据保护系统V5.0、北京数见科技有限公司(简…...
Linux --- 进程控制
目录 1. 进程创建 1.1. 内核数据结构的处理 1.2. 代码的处理 1.3. 数据的处理: 方案一:fork创建子进程的时候,直接对数据进行拷贝处理,让父子进程各自私有一份 方案二:写实拷贝(copy on write) 1.4. fork常规用…...
SVG-椭圆弧-参数转换-计算公式-标准解读
文章目录 1.简介2.基本参数2.1.椭圆的表达2.2.参数变换2.3.注意事项 3.参考资料4.总结 1.简介 为了与其他路径段表示法保持一致, SVG 路径中的圆弧是根据曲线上的起点和终点定义的。椭圆弧的这种端点参数化。优点是它允许与其它路径一致的语法,其中所有…...
利用 LD_PRELOAD劫持动态链接库,绕过 disable_function
目录 LD_PRELOAD 简介 程序的链接 动态链接库的搜索路径搜索的先后顺序: 利用LD_PRELOAD 简单的劫持 执行id命令 反弹shell 引申至 PHP 绕过disable_function 方法1:使用蚁剑的扩展工具绕过disable_function 方法2:利用 mail 函数…...
网件R8500 trojan
一 将路由器刷机成改版梅林 路由器首页的Firmware:380.70_0-X7.9.1是梅林改版 380.xx 梅林原版固件 380.xx_x 梅林改版固件 必须是改版梅林才支持trojan,所以要确保是梅林改版固件 点击上传文件,选择下载好的改版固件,固件地址下载传送门…...
实现校园网开机自启动部署
❤️博客主页: iknow181🔥系列专栏: Python、JavaSE、JavaWeb、CCNP🎉欢迎大家点赞👍收藏⭐评论✍ 目录 一.准备工作 1、IDE安装 2、安装Selenium 1.介绍 2.下载 3、安装pywifi 1.介绍 2.下载 4、下载浏览器驱…...
pycharm 创建vue并实现简易路由功能
使用pycharm创建vue项目时,选择vite来创建vue。为什么使用vite?因为vite是专门针对vue开发的打包框架,以前使用vue-cli来创建vue项目,就是使用的webpack来进行打包的,现在有了vite,就尽量使用vite来创建vue…...
2023年关于爬取Bilibili(B站)视频的一些最新资源和案例
2023年关于爬取Bilibili(B站)视频的一些最新资源和案例: Python爬取B站视频教程 :在Bilibili上发布了一个全面的Python教程系列,其中包括了专门关于爬取B站视频的部分。这个系列似乎涵盖了从基础到人工智能等Python主…...
HyperBDR云容灾v4.10.1发布,划重点:支持UCloud云平台自动化容灾+新增可灵活定义的备份策略
版本更新 HyperBDR云容灾v4.10.1版本来啦! 此次更新为大家带来了多个新功能,下面让我们来看看具体是哪些吧~ 01 策略管理新功能: 多时间段限速功能: 更加灵活的多个时间段限速选择,可以在创建策略时为不同的时间段设…...
第四十一篇,一次matlab与spdlog的合作
做了一次matlab解析spdlog日志文件并动态绘制行车轨迹的尝试,大获成功。 spdlog的存储,数据头有固定格式如下: 日志类型一个字符空格[日期时间]空格[日志内容tag]空格日志内容 有了固定的格式,做解析就好办了。 (日…...
【苍穹外卖】——第一天
第一天学习目标: 本系列只是对于学习苍穹外卖的一个学习总结和问题记录,学习的话还是照着黑马的视频学习 对内容有一个整体把握 搭建项目环境 对一些基础的名词理解 了解nginx反向代理和负载均衡 能使用Swagger测试后端接口 学习内容: pojo分…...
解决SecureFX的中文乱码问题
SecureFX的乱码截图 一般出现乱码问题,看起来会很烦,所以,我们要干掉它。 解决步骤: 1,在SecureFX中,选择“选项”-“全局选项”,打开对话框,不同的版本可能会显示略有不同&#x…...
【字符串匹配】【KMP算法】Leetcode 28 找出字符串中第一个匹配项的下标☆
【字符串匹配】【KMP算法】Leetcode 28 找出字符串中第一个匹配项的下标 (1)前缀和后缀(2)前缀表(最长相同的前缀和后缀的长度)(3)匹配过程示意(4)next数组的…...
STM32CubeIDE开发环境详解与实战指南
STM32CubeIDE开发环境全解析:从入门到实战1. 开发环境概述1.1 STM32CubeIDE核心特性STM32CubeIDE是基于Eclipse框架的集成开发环境,专为STM32微控制器设计。其主要技术特性包括:集成STM32CubeMX配置工具内置GCC编译工具链支持GDB调试接口跨平…...
用华为ENSP模拟器复现智慧小区网络:从VLAN划分到三层架构的保姆级配置教程
华为ENSP模拟器实战:智慧小区网络从零搭建全流程指南 当你第一次拿到智慧小区网络设计方案时,那些抽象的拓扑图和配置参数是否让你望而生畏?作为网络工程师成长路上的必经之路,企业级网络搭建从来不是纸上谈兵的游戏。本文将带你用…...
MedGemma 1.5开源医疗模型:本地化部署满足等保2.0三级与GDPR双合规要求
MedGemma 1.5开源医疗模型:本地化部署满足等保2.0三级与GDPR双合规要求 1. 项目概述与核心价值 MedGemma 1.5是基于Google Gemma架构开发的医疗专用AI模型,专门针对医学问答、病理分析和术语解释场景优化。这个4B参数规模的模型经过PubMed、MedQA等专业…...
B站视频下载终极指南:DownKyi高效工具完整使用教程
B站视频下载终极指南:DownKyi高效工具完整使用教程 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等ÿ…...
从“三次握手”到文件落地:用Wireshark抓包带你彻底搞懂C++ Socket文件传输全过程
从“三次握手”到文件落地:用Wireshark抓包带你彻底搞懂C Socket文件传输全过程 当你在浏览器下载文件时,是否好奇过数据是如何跨越网络准确无误地到达你的电脑?本文将带你用C实现一个完整的TCP文件传输程序,并通过Wireshark抓包工…...
软件测试员转型AI测试:机遇与挑战全解析
技术浪潮下的必然选择在人工智能技术席卷全球的浪潮中,软件测试领域正经历前所未有的变革。2026年数据显示,AI在测试行业的渗透率已超40%,新发AI测试岗位量同比增长543%,薪资溢价高达18%。这一趋势迫使测试从业者直面转型抉择&…...
ollama-QwQ-32B量化部署方案:在OpenClaw中实现低资源消耗
ollama-QwQ-32B量化部署方案:在OpenClaw中实现低资源消耗 1. 为什么需要量化部署大模型? 当我第一次尝试在本地笔记本上运行QwQ-32B模型时,16GB的内存瞬间被吃光,风扇狂转的声音像是在抗议。这让我意识到,想要在个人…...
解锁音乐格式终极指南:一键解决加密音频播放难题
解锁音乐格式终极指南:一键解决加密音频播放难题 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gi…...
ssm+java2026年毕设私人医生预约系统【源码+论文】
本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于在线医疗问诊服务的研究,现有研究主要以综合性互联网医疗平台的宏观发展分析为主,专门针对基于SSM…...
保姆级教程:在Windows 11上完美运行STM32CubeMX 6.9.0(附旧版本资源整理)
在Windows 11上完美运行STM32CubeMX历史版本的终极指南 最近升级到Windows 11后,我发现手头几个老项目使用的STM32CubeMX 6.9.0版本完全无法正常运行。每次启动不是闪退就是卡在初始化界面,而项目又必须使用这个特定版本才能保证代码兼容性。经过一周的…...
