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

【排序】——1.冒泡排序法(含优化)

在这里插入图片描述

冒泡排序

在这里插入图片描述

1.原理

左边大于右边交换一趟排下来最大的交换到右边来(接下来所以文章用升序举例)

  • 从左到右,相邻元素进行比较

  • 每次比较一轮,就会找到序列中最大的一个(最小的一个——降序)。这个数就会从序列的最右边冒出来。

  • 以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边

  • 第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。

在这里插入图片描述

2.图解

在这里插入图片描述

3.代码

代码如下:

//普通版本
void Bubble_sort1(int* arr, int size)
{for (int i = 0; i < size; i++){//开始:i=0      j<size-1(j+1才size-1,符合下标)//size-1-i是因为每一趟就会少一个数比较for (int j = 0; j < size - i - 1; j++)	//{if (arr[j] > arr[j + 1])			//前面大于后面,把大的交换到右边{int tem = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tem;}}}
}

4.优化

  • 设置flag,如果有序了,就不用往下循环了,提前退出
//优化版本
void Bubble_sort2(int* arr, int size)
{for (int i = 0; i < size; i++){int flag = 0;							//默认有序for (int j = 0; j < size - i - 1; j++)	size-1-i是因为每一趟就会少一个数比较{if (arr[j] > arr[j + 1])			//前面大于后面,把大的交换到右边{int tem = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tem;//发生交换,说明无序flag = 1;}}//如果前面都没有发生交换,说明已经有序了if (flag == 0){break;			//不用继续了,已经有序,提前退出}}
}

我给这个案例测试:
1 2 3 4 5 6 7 9 8 就9和8没有升序

普通版本
在这里插入图片描述
优化版本
在这里插入图片描述
显然速度稍微得到提升!

5.时空复杂度

在这里插入图片描述

http://www.lryc.cn/news/464546.html

相关文章:

  • 在MySQL中创建数据库和表
  • Hadoop 安装教程——单节点模式和分布式模式配置
  • 给c++小白的教程10:一维数组
  • 【排序】3.希尔排序法
  • 商品详情数据API接口概述(json数据格式返回参考)
  • Jmeter简介
  • 网页前端开发之HTML入门篇:标题标签 heading
  • 医院信息化与智能化系统(3)
  • 数据结构(线性表)
  • ArcGIS Pro SDK (十八)栅格
  • c++ 对象作用域
  • 【无标题】海尔AI英语面试
  • 软件设计模式------概述
  • 刷题/学习网站推荐
  • OQE-OPTICAL AND QUANTUM ELECTRONICS
  • 在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?
  • Chromium html<textarea>c++接口定义
  • OpenCV高级图形用户界面(13)选择图像中的一个矩形区域的函数selectROI()的使用
  • 《计算机视觉》—— 基于dlib库的人检检测
  • 分布式数据库安全可靠测评名录之平凯数据库(TiDB企业版)
  • 动态规划之打家劫舍
  • 嵌入式入门学习——8基于Protues仿真Arduino+SSD1306液晶显示数字时钟
  • 盘点现代浏览器的各种神奇能力,功能令人惊讶
  • 人工智能停滞:人工智能投资与人工智能采用之间的差距
  • 高效容器化技术(3)---docker镜像仓库
  • 使用docker搭建lnmp运行WordPress
  • 【设计模式】深入理解Python中的桥接模式(Bridge Pattern)
  • YOLOv11改进策略【卷积层】| SAConv 可切换的空洞卷积 二次创新C3k2
  • Javaweb基础-axios
  • 智能EDA小白从0开始 —— DAY20 OrCAD