活动地址:CSDN21天学习挑战赛
✅作者简介:C/C++领域新星创作者,为C++和java奋斗中 ✨个人社区:微凉秋意社区 🔥系列专栏:经典算法 📃推荐一款模拟面试、刷题神器👉注册免费刷题
🔥前言
今天总结一下优化版的经典算法——冒泡排序,不同于以往的暴力二重for循环,这里的冒泡排序增加了一个标志位。我们要理解该冒泡排序的概念,算法流程与算法思想,探讨时间复杂度。这也是本专栏第六篇博文,感兴趣的朋友可以订阅以便持续观看。
文章目录
冒泡排序算法解析
一、理解冒泡排序思想
1、算法概念
- 冒泡排序算法解析
- 一、理解冒泡排序思想
- 1、算法概念
- 2、算法思想
- 二、算法分析
- 1、算法流程
- 2、实现步骤
- 三、代码实现
- 1、源码及运行效果
- 2、时间复杂度分析
也称气泡排序,是经典的交换排序方法。整个过程就是在无序区中对相邻元素进行两两比较,将不满足相对顺序的一对儿元素进行交换,再进行下一对元素的比较。
2、算法思想总结来说,每一趟冒泡排序将会排好一个元素(极值)。不断的在无序区中执行该步骤,如果在某一次比较的过程中没有发生元素的交换,则证明元素都已经有序,可以提前结束整个算法。或者直到无序区中的元素减少到一个时,整个算法结束,此时整个序列有序。
二、算法分析 1、算法流程假如要对该序列进行冒泡排序,解析一下算法流程:
- 第一趟排序:7和4 交换位置,变为:
- 第二趟排序:6和4 交换位置,变为:
- 此时序列符合升序排列,提前结束循环,排序完成,退出循环
- 首先当外层循环 i 为0时,内层循环中从序列里第一个元素开始两两计较,不是升序则交换位置,是升序则往后遍历,那么第一次外层循环一定可以确定最大值且位置在序列末尾。
- 那么当外层循环次数增多,内层循环范围就要对应缩减,应为总长度 - 外层循环次数 - 1(减1是为了防止 i 等于0时数组溢出)。
- 重复以上步骤,如果序列已经为升序,通过标志位来提前结束程序。
C++源代码:
#include
using namespace std;
//冒泡排序声明
void maopaosort(int A[], int len);
//冒泡排序实现
void maopaosort(int A[], int len)
{
for (int i = 0; i
关注
打赏
热门博文
- 【Java】设计模式之单例模式与工厂模式
- 【Java面试宝典】线程安全问题|线程死锁的出现|线程安全的集合类
- 【Rust指南】错误的分类与传递|使用kind进行异常处理
- 【Servlet】规范项目结构|基于Mysql+JDBC+Servlet 制作简易网页|实现登录、添加、删除、显示的功能
- 【C语言】规范掌握C语言函数|数组名的妙用|指针快速入门|综合使用小案例
- 【Servlet】超详细开发步骤|在idea上配置Tomcat|网页显示当前系统时间
- 新学期,新FLAG | 要以码为梦而非夜郎自大
- 猿创征文 | 【Rust指南】枚举类与模式匹配精讲
- 牛客网《剑指offer》专栏刷题练习之二叉树合集
- 开学季&河科大社区活动详情介绍实例
