news 2026/7/29 8:07:44

冒泡排序--附图解以及代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
冒泡排序--附图解以及代码

冒泡排序(Bubble Sort)详解

1. 什么是冒泡排序?

冒泡排序是一种基于比较的交换排序算法
它的核心思想是:重复遍历待排序序列,依次比较相邻的两个元素,若顺序错误(逆序)则交换,直到没有逆序对为止。
每一轮遍历都会将当前未排序部分中的最大(或最小)元素“冒泡”到序列的末端,如同气泡从水底浮起,因此得名。


2. 算法步骤(以升序为例)

  1. 从数组第一个元素开始,依次比较相邻元素arr[i]arr[i+1]
  2. arr[i] > arr[i+1],则交换两者位置。
  3. 继续向后比较,直到数组末尾。此时,整个序列的最大值已被交换到最后一位
  4. 忽略已排好的最后一个元素,对剩余的前n-1个元素重复上述过程。
  5. 每一轮结束后,未排序部分的最大值都会“冒泡”到正确位置。
  6. 重复n-1轮(或直到某一轮未发生任何交换),排序结束。

3. 动态演示

4. 算法复杂度与稳定性

特性
最好时间复杂度O(n) —— 数组已有序(优化版)
最坏时间复杂度O(n²) —— 数组完全逆序
平均时间复杂度O(n²)
空间复杂度O(1) —— 原地排序,无需额外数组
稳定性稳定—— 相等元素的相对顺序不变

5. 优缺点

优点

  • 算法逻辑简单,易于理解和实现。
  • 稳定排序,适合对稳定性有要求的场景。
  • 原地排序,内存占用极低。
  • 经过优化后,对近乎有序的数组效率很高(O(n))。

缺点

  • 平均和最坏时间复杂度均为 O(n²),处理大规模数据时效率低下。
  • 实际工程中几乎不被采用(仅作为教学或小规模数据排序)。

6. 示例代码

#include<stdio.h>#include<stdbool.h>// 优化版冒泡排序voidbubbleSort(intarr[],intn){for(inti=0;i<n-1;i++){bool flag=false;for(intj=0;j<n-1-i;j++){if(arr[j]>arr[j+1]){inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;flag=true;}}if(!flag)break;}}intmain(){intarr[]={5,8,6,3,9,2,1,7};intn=sizeof(arr)/sizeof(arr[0]);bubbleSort(arr,n);for(inti=0;i<n;i++)printf("%d ",arr[i]);// 输出:123456789return0;}


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/29 8:05:04

AI会议系统三重防护:提升企业级应用可靠性

1. 项目概述&#xff1a;AI信任危机与企业级解决方案 上周科技圈最热门的新闻莫过于某AI公司公开承诺"出错赔10万"的营销事件&#xff0c;这个看似激进的商业策略背后&#xff0c;折射出当前企业市场对AI技术最核心的焦虑——信任缺失。作为专注智能会议领域的技术从…

作者头像 李华
网站建设 2026/7/29 8:04:56

匿名管道--任务派发程序

整体代码逻辑架构图如下&#xff1a;整体架构图如下&#xff1a;整体代码如下:main.cc:#include "processpool.hpp" #include "Tasks.hpp" int main(int argc, char *argv[]) {if(argc!2){cout<<"Usage: "<<argv[0]<<" &…

作者头像 李华
网站建设 2026/7/29 8:04:01

MANUS Metagloves Pro,让指尖动作精准走进数字世界

在元宇宙、人形机器人、数字孪生、虚拟仿真技术飞速迭代的当下&#xff0c;手部作为人体最灵活、最精细的交互载体&#xff0c;其数字化复刻能力直接决定了沉浸式交互、智能操控、数字内容创作的真实质感。传统动作捕捉设备受限于光学遮挡、数据漂移、精度不足等问题&#xff0…

作者头像 李华
网站建设 2026/7/29 8:03:58

第 02 课:变量、数据类型、运算与键盘输入

第 02 课&#xff1a;变量、数据类型、运算与键盘输入 本课目标 学完后&#xff0c;你应当能够&#xff1a; 用变量保存整数、小数、文字和真假状态。修改变量并完成基本运算。使用 Scanner 接收键盘输入。看懂常见的类型错误。 1. 用 IDEA 打开学习目录 打开 IDEA&#xff0c;…

作者头像 李华
网站建设 2026/7/29 8:03:46

Shell函数进阶:从基础语法到生产级脚本模块化实战

1. 从“命令堆叠”到“模块化”&#xff1a;为什么你需要掌握Shell函数如果你写过超过50行的Shell脚本&#xff0c;大概率经历过这样的场景&#xff1a;一段用来检查日志文件是否存在的代码&#xff0c;在脚本的开头、中间和结尾各出现了一次&#xff0c;每次只是改了个文件名。…

作者头像 李华
网站建设 2026/7/29 8:03:22

STM32 HAL库SysTick配置与应用:从心跳定时器到RTOS时基

1. 项目概述&#xff1a;为什么SysTick是STM32的“心跳”玩过STM32的朋友都知道&#xff0c;定时器是单片机的核心外设之一&#xff0c;从简单的延时到复杂的PWM输出都离不开它。但在众多定时器中&#xff0c;有一个非常特殊的存在——系统滴答定时器&#xff0c;也就是SysTick…

作者头像 李华