当前位置: 首页 > news >正文

算法 C语言 冒泡排序

目录

一、冒泡排序思想

二、冒泡排序代码

三、冒泡排序时间复杂度与空间复杂度

1. 时间复杂度分析

2. 空间复杂度分析


一、冒泡排序思想

冒泡排序的核⼼思想就是:两两相邻的元素进⾏⽐较,元素 小 / 大 就交换,然后进行下一个两两相邻的元素进⾏⽐较,重复以上动作,直到 升序 / 降序。


二、冒泡排序代码

#include<stdio.h> void bubble_sort(int* arr, int sz) { int i = 0; for (i = 0; i < sz - 1; i++) { int j = 0; int flag = 1; for (j = 0; j < sz - 1 - i; j++) { if (arr[j] > arr[j+1]) { int tmp = 0; tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; flag = 0; } } if (flag) { break; } } } int main() { int arr[] = { 10,9,8,7,6,5,4,3,2,1 }; int sz = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr, sz); for (int i = 0; i < sz; i++) { printf("%d ", arr[i]); } return 0; }

进行升序排序,如图:


三、冒泡排序时间复杂度与空间复杂度

1. 时间复杂度分析

冒泡排序的核心操作是比较交换。我们通过嵌套循环来实现:

外层循环:控制排序的“轮数”。对于 n 个元素,最多需要 n-1 轮才能确保完全有序。

内层循环:在每一轮中,对未排序部分的相邻元素进行两两比较,并根据需要交换位置。

时间复杂度我们只讨论最坏情况:

当需要排序成升序的数组完全是逆序的时,每一轮都需要进行最大次数的比较和交换。

比较次数 =(n-1) + (n-2) + ... + 2 + 1 = n(n-1)/2

交换次数同样约为n(n-1)/2

因此,总操作次数与 n² 成正比,时间复杂度为O(n²)

2. 空间复杂度分析

冒泡排序的整个排序过程只在原数组内部进行。除了使用几个固定的临时变量(如用于交换的tmp、循环计数器i, j、判断是否已经 升序 / 降序 的flag)外,不需要申请额外的、与数据规模 n 相关的存储空间。

所以无论数组有多大,这些临时变量的数量都是固定的。因此,冒泡排序的空间复杂度为O(1)

http://www.jsqmd.com/news/102430/

相关文章:

  • uvm_sequence机制中重要task的拆解
  • BetterNCM终极指南:打造个性化网易云音乐播放体验
  • LobeChat向上销售话术生成
  • Chrome搜索替换插件:终极免费的网页文本批量处理神器
  • 3步搞定小爱音箱音乐播放自由:XiaoMusic开源工具终极指南
  • LobeChat灾备恢复进度通报
  • PuzzleSolver:CTF MISC解题利器全面解析与实战指南
  • LobeChat优惠券系统设计:促销活动如何吸引用户?
  • 基于微信小程序的一次性环保餐具销售系统毕业设计源码(源码+lw+部署文档+讲解等)
  • 基于微信小程序的会议发布与预约系统的设计与开发计算机毕业设计(源码+lw+部署文档+讲解等)
  • SpringBoot+Vue 工作量统计系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • OBS Studio直播质量优化:5大维度打造专业级推流体验
  • 基于SpringBoot+Vue的公司资产网站管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 供应商管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • Sketchfab模型获取终极指南:Firefox专属Tampermonkey脚本使用教程
  • AppleRa1n 完整指南:轻松绕过iOS激活锁的终极方案
  • 安卓端秒速AI绘图:denoising-diffusion移动化实战指南
  • 大数据领域数据工程的数据迁移方案
  • 京东自动化脚本实战指南:5分钟搞定智能签到系统
  • AI元人文构想:在黑箱与元白箱之间的抉择分析
  • SpringBoot+Vue 高校疫情防控web系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • ExplorerBlurMica:重新定义Windows文件管理器的视觉体验
  • Java SpringBoot+Vue3+MyBatis 工作量统计系统系统源码|前后端分离+MySQL数据库
  • 前后端分离公司资产网站系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • Java SpringBoot+Vue3+MyBatis 果蔬作物疾病防治系统系统源码|前后端分离+MySQL数据库
  • LobeChat插件系统全解析:打造个性化AI助手的终极武器
  • LobeChat + GPU算力组合推荐:高效运行开源大模型的最佳实践
  • Shutter Encoder终极视频转换工具:从入门到精通的完整使用手册
  • WebSocket 断线重连后如何续传(从哪个 offset 开始)? WebSocket 断线重连续传方案详解
  • 如何用FGA自动战斗工具打造终极FGO游戏自动化体验