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

【排序算法】⑤冒泡排序

系列文章目录

 第一篇:【排序算法】①直接插入排序-CSDN博客

第二篇:【排序算法】②希尔排序-CSDN博客

第三篇:【排序算法】③直接选择排序-CSDN博客

第四篇:【排序算法】④堆排序-CSDN博客

第五篇:【排序算法】⑤冒泡排序-CSDN博客

第六篇:【排序算法】⑥快速排序:Hoare、挖坑法、前后指针法-CSDN博客

第七篇:【排序算法】⑦归并排序-CSDN博客


文章目录

目录

系列文章目录

文章目录

前言

一、冒泡排序是什么?

二、冒泡排序图解

三、实现代码

四、分析冒泡排序

总结



前言

冒泡排序属于交换排序的一种。交换排序基本思想:所谓交换,就是按序列中两个数据码值的比较结果来决定是否对换这两个数据在序列中的位置。

交换排序的特点是:将码值大的向尾部移动,码值小的往前移动

冒泡排序实现简单,主要是为后续同属于交换排序的快排做铺垫,故本文篇幅较短。


一、冒泡排序是什么?

冒泡排序的基本思想

1. 比较相邻的元素:首元素设从i=0开始,依次比较相邻的两个元素(j=i+1)。如果第一个比第二个大(升序排序),就交换它们。

2. 然后i不变,j++,循环直到 j 到达数组末尾,此时最后一个数据一定是该数据集最大的。

3. i++,重复上述步骤,直到遍历完整个数组。

核心思想:重复遍历数组,比较相邻元素,如果顺序错误就交换它们

排序过程:每轮遍历会将当前最大的元素"冒泡"到正确位置,类似水中的气泡上浮,因此得名。

二、冒泡排序图解

设数组为int a[ ]={5,3,8,4,2},两层循环,外层循环控制 i=0,内存控制 j=i+1,各自的循环结束时++,结束条件为到达数组末尾<n;

三、实现代码

以升序为例,降序同理。

//冒泡排序
void BubbleSort(int* a, int n)
{if (!a)return;for (int i = 0; i < n; ++i){int Change = 1;for (int j = i + 1; j < n; ++j){if (a[i] > a[j]){swap(&a[i], &a[j]);Change = 0;}}//如果Change的值未变,则说明数组后续数据都有序if (Change)break;}
}void swap(int* a, int* b)
{int temp = *a;*a = *b;*b = temp;
}

break优化解释:

如果在i=某值的一轮比较中,Change的值都未发生改变(即内循环没有发生交换),说明后续数据都大于或等于a[i]且呈现递增趋势为有序状态,故此时可以跳出循环,提前结束排序。

四、分析冒泡排序

冒泡排序的特性总结:
1. 冒泡排序是一种较容易理解的排序;
2. 时间复杂度:O(N^2),(若加上break优化,则较不优化平均快上3倍);
3. 空间复杂度:O(1)
4. 稳定性:稳定


总结

本文是【排序算法】系类第五篇,主要介绍什么是冒泡排序,以及如何实现冒泡排序,最后分析冒泡排序特性。

冒泡排序较为简单,但它是为同为交换排序的“快速排序”做铺垫,快速排序是当今实际代码中最常使用的排序,也是本系列的重点所在。

http://www.dtcms.com/a/326510.html

相关文章:

  • Java学习 -- 可变参数与Collections工具类
  • docker安装Engine stopped
  • AI自动生成接口测试脚本全流程
  • 当AI重塑世界:普通人如何成为“主动进化者”?
  • 在 .NET Core 5.0 中启用 Gzip 压缩 Response
  • ECCV 2024 论文解读丨具身智能、机器人研究最新突破创先点分享合集
  • MCU中的存储器映射(Memory Map)
  • 登录系统英文使用 Sign In?Log In?还是 Log On?
  • Windows Server 2022域控制器部署与DNS集成方案
  • 大模型工程问题
  • Python网络爬虫(一) - 爬取静态网页
  • 打烊:餐厅开业前的“压力测试”
  • nginx 设置二级目录-实战
  • P1967 [NOIP 2013 提高组] 货车运输【题解】
  • 当智慧在腕间流转:一场无声的协同交响
  • haproxy 2.4.x, /metrics 取数据遇到的问题
  • 项目代码涉及的知识点笔记整理
  • C++高频知识点(二十一)
  • 嵌入式学习 day48 IMX6ULL裸机驱动 -按键、中断
  • 源码分析Eino框架工具调用--创建篇
  • Redis RDB和AOF 流程、优缺点详细介绍
  • python每日一题练习 有效的字母异位词 非常简单
  • Linux软件编程--IO
  • Linux 软件编程:IO——标准IO
  • 《录井管理与工程》书籍第一章要点及相应思考
  • 工业数采引擎-通信协议(Modbus/DTU/自定义协议)
  • FFmepg源码系列-avformat_open_input()
  • python之uv使用
  • [动态规划]最长公共子序列(LCS)
  • Nacos添加权限