当前位置: 首页 > 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)原地排序,无需额外内存
稳定性稳定相等元素不交换

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

http://www.xdnf.cn/news/608419.html

相关文章:

  • 新能源汽车产业链图谱分析
  • python学习day2:运算符+优先级
  • 【沉浸式求职学习day47】【JSP详解】
  • Java—— 网络爬虫
  • Redis 8.0 新增数据结构深度解析:从核心功能到生态重构
  • 【数据架构04】数据湖架构篇
  • Flutter跨平台通信实战|3步打通Android原生能力,实现底层API调用!
  • Flutter - 国际化
  • Flutter 3.32 升级要点全解析
  • ros2 humble安装ros-humble-tf2-tools
  • 布丁扫描高级会员版 v3.5.2.2| 安卓智能扫描 APP OCR文字识别小助手
  • 数字人交互系统哪家强?品牌技术对比!
  • JavaScript进阶(十二)
  • 【AS32X601驱动系列教程】GPIO_点亮LED详解
  • 在bash中,如何打开特定文件,使用特定字符串替换特定字符串?请编写代码
  • 哈希表的实现(上)
  • mac将自己网络暴露到公网
  • ROS云课三分钟-cmake gcc g++ 默认版本和升级-250523
  • 前后端联调实战指南:Axios拦截器、CORS与JWT身份验证全解析
  • 提示词工程框架——CO-STAR 框架实战
  • 江科大DMA直接存储器访问hal库实现
  • 深度剖析 MCP SDK 最新版:Streamable HTTP 模式
  • 学习黑客Nmap 是什么?
  • 数据结构 -- 交换排序(冒泡排序和快速排序)
  • 信息安全管理与评估赛项参考答案-模块1网络平台搭建
  • 【软件测试】第三章·软件测试基本方法(基于需求的测试方法)
  • Trae+12306 MCP,10分钟搭建行程可视化助手
  • Gmsh 代码深度解析与应用实例
  • 【开源项目1】基于机器学习木马查杀引擎项目
  • 1.3 线性系统的时域分析法