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

冒泡排序:轻松理解与实现

基本概念

排序是计算机中非常重要的一种操作,其目的是将一组无序的数据元素通过某种算法调整为有序的数据元素。

冒泡排序是一种简单直观的排序算法,简单来说就是,从第一个元素开始,依次比较相邻两个元素的大小,如果左边的数更大,则交换,然后进行下一个元素的比较,第一趟比较过后,可以确定最大的元素放到最后的位置,接着进行第二趟比较(遍历范围递减),直到完成所有排序。

示例步骤

核心思想:像气泡上浮一样,每次遍历将最大的数“冒”到数组末尾。

示例:排序 [5, 3, 8, 4]

第 1 轮遍历:(确定最大值8)

  • 比较 5 和 3,交换 → [3, 5, 8, 4]
  • 比较 5 和 8,不交换 → [3, 5, 8, 4]
  • 比较 8 和 4,交换 → [3, 5, 4, 8]
  • 最大值 8 被移到末尾。

第 2 轮遍历:(确定次大值5)

  • 比较 3 和 5,不交换 → [3, 5, 4, 8]
  • 比较 5 和 4,交换 → [3, 4, 5, 8]
  • 次大值 5 被移到倒数第二位。

第 3 轮遍历:(完成排序)

  • 比较 3 和 4,不交换 → [3, 4, 5, 8]
  • 数组已有序。

代码实现

基本实现

void bubbleSort(int arr[], int len)
{for (int i = 0; i < len - 1; i++){// 每轮比较范围减少for (int j = 0; j < len - 1 - i; j++){if (arr[j] > arr[j + 1])	// 升序排序条件{//swap(arr[j], arr[j + 1]);int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}

优化实现

如果在某一轮遍历中没有发生任何交换,说明数组已经有序,可以提前结束排序。

void bubbleSort(int arr[], int len)
{for (int i = 0; i < len - 1; i++){bool flag = false; // 优化点:标记是否发生交换for (int j = 0; j < len - 1 - i; j++){if (arr[j] > arr[j + 1]){swap(arr[j], arr[j + 1]);flag = true;}}if (!flag)  // 无交换说明已有序,提前终止{break;}}
}

算法分析

指标说明
时间复杂度平均 O(n²)适合小规模数据
空间复杂度O(1)原地排序,无需额外内存
稳定性稳定相等元素不交换

一句话总结:冒泡排序通过多次遍历数组,将较大的元素逐步“冒泡”到数组末尾,直到所有元素都归位。

相关文章:

  • VSCode 插件 GitLens 破解方法
  • 中文域名25周年,取得哪些里程碑式的进展?
  • 百度飞桨PaddleOCR 3.0开源发布 OCR精度跃升13%
  • word为章节标题添加自动编号
  • 一个C#跨平台的机器视觉和机器学习的开源库
  • Pandas:数据分析中的缺失值检测、加载、设置、可视化与处理
  • 《精灵宝可梦特别篇》漫画集 4部合集共76卷,PDF格式分享
  • python 实现一个完整的基于Python的多视角三维重建系统,包含特征提取与匹配、相机位姿估计、三维重建、优化和可视化等功能
  • 【心海资源】黄金首饰价格查询单页源码
  • HarmonyOS 鸿蒙应用开发基础:转换整个PDF文档为图片功能
  • epub→pdf | which 在线转换??好用!!
  • 医学人工智能中的分层处理与跨模态融合:深度架构设计研究(基础教程.上)
  • echarts实现项目进度甘特图
  • 【ubuntu】安装NVIDIA Container Toolkit
  • 电脑无法识别打印机usb设备怎么办 一键解决!
  • Django 中的 ORM 基础语法
  • 如何最简单、通俗地理解什么是NLP?
  • React Hooks底层执行逻辑详解、自定义Hooks、FiberScheduler
  • 湖北理元理律师事务所债务优化方案:让还款与生活平衡成为可能
  • 时序数据库 TDengine × Superset:一键构建你的可视化分析系统
  • 怎么更换网站logo/广告公司注册
  • wordpress 访问控制/武汉做seo
  • 怎么样做网站 用网站赚钱/广告联盟论坛
  • 网站组织结构图/适合发表个人文章的平台
  • 只做美食类目产品的网站/济南最新消息今天
  • 公司网站建设 公司简介怎么写/如何出售自己的域名