算法之路--冒泡排序算法

news2024/10/7 6:41:11

写在前面

        很早就想系统梳理所接触的所有算法,但是只是存在于一个想法阶段,懒惰使人遗忘不是么。作为一个软件开发人员,绕不开算法与数据结构,既然绕不开,何不逐一分析学习透彻,与君共勉之。

        冒泡排序算法(Bubble Sort)作为排序算法较为基础的一种,也是比较好理解的,所以先从这里开始总结排序算法。排序算法也根据实际的算法思路分为插入排序、选择排序、交换排序、归并排序,冒泡属于交换排序的一种。

算法思路

        冒泡排序,顾名思义就是像水泡上浮一样,大大小小...

         冒泡排序就是从数组的首个元素出发,单步向后移动,一一与后面的元素进行比较,遇到比自己小的元素即进行交换。进行完一轮后将最大值放到最后一位。

52413
step125413
step224513
step324153
step424135

然后再进行下一轮

24135
step124135
step221435
step321345

next round:

21345
step112345
step212345

直到所有都完成

12345
step112345

以上图示中:红色代表原位置,绿色代表待比较位置,蓝色为排序完成位置。

引用动态图示:

 C++示例代码

#include <iostream>
#include <vector>
using namespace std;

void bubble_sort(vector<int>& v)
{
	int len = v.size();
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			if (v[j] > v[j + 1])
			{
				swap(v[j], v[j+1]);
			}
		}
	}
}

int main()
{
	vector<int> vec{4,2,11,1,5,65,88,43,12,3,4};
	bubble_sort(vec);

	system("pause");
	return 0;
}

时间复杂度

        从上述例子可以看出,不是每一次都必须进行交换,如果发现当前元素即为最小元素,则不必再与后面元素进行比较交换,所以在时间复杂度上存在两个极限:

最优的情况是不用交换排序,一开始一切都排序好了,只需要进行一次遍历即可,时间花销为:[n(n-1)/2]; 复杂度为O(n)

最差的情况就是排序的时候,全部从大到小逆序的,花销时间为[3n(-1)]/2,所以最差的情况下时间的复杂度是执行次数平方为O(n²)

空间复杂度

        最优的空间复杂度,同样,就是不需要借用第三方内存空间,则复杂度为0。

        最差的空间复杂度就是开始元素逆序排序,每次都要借用一次内存,按照实际的循环次数,为O(N)。

        平均的空间负杂度为:O(1)。

注:动态图示引用自菜鸟教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/508193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单片机c51中断 — 中断嵌套实例IE0的置位和撤销

项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第五章&#xff0c;中断 根据下原理图&#xff0c;编程验证二级外部中断嵌套效果。其中K0定为低优先级中断源&#xff0c;K1为高优先级中断源。此外&#xff0c;利用发光二极管D1验证外部中断请求标志IE0在脉…

Minio(minio-20221029062133.0.0.x86_64.rpm) Linux 环境安装

Minio Linux 环境安装 资源下载 镜像下载地址&#xff1a;http://dltest.minio.org.cn/server/minio/release/linux-amd64/archive/ 资源包下载地址&#xff08;与献文匹配&#xff09;&#xff1a;https://download.csdn.net/download/scdncby/87769604 安装 上传rpm安装…

React+Antd+Vite+TypeScript 项目实战教程

本教程属于react入门教程&#xff0c;课程围绕如何搭建一个项目框架展开&#xff0c;会带你快速了解react、redux、redux-devtool、react-router-dom、axiox这些常见技术的使用方式&#xff0c;教程最后会附上项目源码。 一、创建项目 在搭建项目时&#xff0c;我们通常会使用…

day38_JDBC

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、数据库连接池 二、反射 三、封装DBUtil 零、 复习昨日 SQL注入 预处理语句 String sql "select * from user where id ?"; PreparedStat…

Spring Boot访问数据库

SpringBoot访问数据库时&#xff0c;我们可以使用以下三种&#xff0c;JdbcTemplate、Spring Boot Data Jpa、mybatis。 JdbcTemplate是Spring自己提供的&#xff0c;但是其操作不方便&#xff0c;甚至有些繁琐&#xff0c;在实际应用中也是很少会使用&#xff0c;所以这里就不…

使用MobaXterm在Windows系统远程Ubuntu系统

使用场景 通常大部分办公软件都安装在Windows系统上&#xff0c;使用Windows系统办公更便捷&#xff0c;并且大多办公软件在Ubuntu系统上不兼容&#xff0c;即使进行处理&#xff0c;使用体验也不好&#xff0c;下面针对在同一局域网使用Windows远程Ubnuntu进行ssh、VNC和打开…

Nature -- 空间表观组学与转录组学联合分析,揭示基因表达的精准调控

为充分理解组织中单细胞的基因表达调控&#xff0c;需要在单细胞水平以空间分辨率的方式集成不同分子信息的不同层面&#xff0c;包括表观基因组和转录组数据。虽然单细胞多组学方法可以捕捉来自不同分子层的信息&#xff0c;但是空间组学方法到目前为止主要局限于一层分子。张…

MATLAB的无人机遥感数据预处理与农林植被性状估算实践

在新一轮互联网信息技术大发展的现今&#xff0c;无人机、大数据、人工智能、物联网等新兴技术在各行各业都处于大爆发的前夜。为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节&#xff0c;逐步摆脱人力依赖&#xff1b;在施肥灌溉环节构建智慧节能系统&a…

ASP.NET core WebApi Cors跨域解决

前言 我用了最新版的Asp.net webapi &#xff0c;在csdn上面搜跨域如何解决的时候&#xff0c;发现csdn上面对于.NET技术讨论不是很多。没办法&#xff0c;只能面向官方文档和GitHub编程了。 项目类型确认 NuGet包引入 前面两个已经放弃维护了&#xff0c;我们就不用了。用最…

使用Actor-Critic的DDPG强化学习算法控制双关节机械臂

在本文中&#xff0c;我们将介绍在 Reacher 环境中训练智能代理控制双关节机械臂&#xff0c;这是一种使用 Unity ML-Agents 工具包开发的基于 Unity 的模拟程序。 我们的目标是高精度的到达目标位置&#xff0c;所以这里我们可以使用专为连续状态和动作空间设计的最先进的Deep…

【uni-app】errMsg : navigateTo:fail can not navigateTo a tabbar page报错解决方案

文章目录 前言一、报错二、解决方案更改api 总结 前言 大家好&#xff0c;今天在进行uni-app项目开发时&#xff0c;在进行页面跳转的时候报了一个错误&#xff0c;一开始觉得只是个小报错就没有仔细看这个报错&#xff0c;直接就到页面检查看是不是跳转没写好&#xff0c;但是…

Spring IOC:详解【依赖注入数值问题 依赖注入方式】

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 spring版本&#xff1a;5.3.1 文章目录 Spring系列专栏文章目录一、Spring依赖注入数值问题1.1 字面量数值问…

计算机网络 | 广播与组播

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

Jetpack之livedata原理分析

1.LiveData是什么&#xff1f; 只有在生命周期处于started和resumed时。livedata才会更新观察者 2.Livedata的各种使用方式 1.更新数据 class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceSta…

Python数据分析实战【十四】:python的三种排序方法:sort、sorted、sort_values案例学习【文末源码地址】

文章目录 一、List.sort()排序案例一&#xff1a;按照列表中的元素进行排序案例二&#xff1a;按照销售额数据进行排列 二、sorted()排序案例一&#xff1a;sorted()对列表进行排序案例二&#xff1a;sorted()对字典进行排序案例三&#xff1a;sorted()对列表中的字典元素排序 …

【AI大模型】国产AI技术再创新高,讯飞星火认知大模型中文能力已经超越ChatGPT?

文章目录 前言SparkDesk讯飞星火认知大模型简介语言理解知识问答逻辑推理数学题解答代码理解与编写亲自体验写在最后 前言 5月6日&#xff0c;讯飞星火认知大模型成果发布会在安徽合肥举行。科大讯飞董事长刘庆峰、研究院院长刘聪发布讯飞星火认知大模型&#xff0c;现场实测大…

(一)ArcGIS空间数据的转换与处理——投影变换

ArcGIS空间数据的转换与处理——投影变换 原始数据往往由于在数据结构、数据组织、数据表达等方面与用户需求不一致而要进行转换与处理。本节主要介绍 ArGIS 中数据的投影变换内容。 目录 ArcGIS空间数据的转换与处理——投影变换 1.概述2.定义投影3.投影变换3.1栅格数据的投…

Python数据分析实战【十四】:Python的三种排序方法:sort()、sorted()和sort_values()【文末源码地址】

文章目录 一、List.sort()排序案例一&#xff1a;按照列表中的元素进行排序案例二&#xff1a;按照销售额数据进行排列 二、sorted()排序案例一&#xff1a;sorted()对列表进行排序案例二&#xff1a;sorted()对字典进行排序案例三&#xff1a;sorted()对列表中的字典元素排序 …

计算机网络 | 基于TCP的C/S模型代码实现

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

QT QGraphicsView 提升到 QChartView报错 解决方案

QT QGraphicsView 提升到 QChartView报错 解决方案 本文主要描述, 使用QT提供的QChartView来绘制图表,提升QGraphicsView控件继承QChartView后,然后将QGraphicsView提升到我们自己写的类,怎么才能确保提升后编译不报错. [问题描述] 使用QGraphicsView显示图表的时候,我们需要将…