排序算法——冒泡排序

news2024/11/15 17:42:40

冒泡排序

算法步骤

升序排序为例:

  • 比较相邻元素,如果前面的比后面的元素大,则两元素交换位置
  • 对每一对相邻元素进行比较,大的放后,这样最后的元素将是最大的元素
  • 对越来越少的混乱元素重复上述步骤(最后的元素已经有序,不需比较),直到没有元素需要交换位置

动图演示

实现代码

void BubbleSort(int* nums, int numsSize)
{
   for (int i = 0; i < numsSize - 1; i++)
   {
   	for (int j = 0; j < numsSize - 1 - i; j++)
   	{
   		if (nums[j] > nums[j + 1])
   		{
   			Swap(&nums[j], &nums[j + 1]);	//Swap()函数需要自己实现
   		}
   	}
   }
}

稍加优化

  • 如果在一趟遍历中未发生交换,就可以说明数组已经有序
  • 因此我们可以设计一个标记flag,每次外层循环开始时都初始化为1,若内层循环发生了交换就将其改为0
  • 因此如果内层循环结束后flag仍为1,就说明这一次遍历未发生交换,即数组已经有序

优化后的代码

void BubbleSort(int* nums, int numsSize)
{
	for (int i = 0; i < numsSize - 1; i++)
	{
		int flag = 1;
		for (int j = 0; j < numsSize - 1 - i; j++)
		{
			if (nums[j] > nums[j + 1])
			{
				Swap(&nums[j], &nums[j + 1]);
				flag = 0;
			}
		}
		if (flag)
			break;
	}
}

时间复杂度

  • 易得冒泡排序的时间复杂度为O(N2)

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

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

相关文章

OpenCV——《bitwise_and》mask的操作以及直方图的操作

1.bitwise_and和mask操作 bitwise_and该函数是一个and操作当两者全为1的时候才会为1&#xff0c;有0则0. import cv2 import numpy as np import matplotlib.pyplot as pltdef cv_show(name,img):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows() maskmask np.zer…

【Java】JVM学习(一)

JVM是一种规范 Java程序的执行过程 一个 Java 程序&#xff0c;首先经过 javac 编译成 .class 文件&#xff0c;然后 JVM 将其加载到方法区&#xff0c;执行引擎将会执行这些字节码。执行时&#xff0c;会翻译成操作系统相关的函数。JVM 作为 .class 文件的翻译存在&#xff…

bash: fork: Cannot allocate memory

bash: fork: Cannot allocate memory 将 echo 1000000 > /proc/sys/kernel/pid_max 命令用于修改 /proc/sys/kernel/pid_max 文件&#xff0c;这将更改系统中进程ID&#xff08;PID&#xff09;的最大值。 进程ID是操作系统为每个正在运行的进程分配的唯一标识符。pid_max…

python torch 训练 qt.qpa.plugin: Could not load the Qt platform plugin “xcb“的解决方法

详细问题描述 qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found. This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this prob…

chatgpt赋能python:Python编程入门指南:Python花钱吗?

Python编程入门指南&#xff1a;Python花钱吗&#xff1f; Python是一个开源、免费的编程语言&#xff0c;当然&#xff0c;这是大家最常听到的关于Python的优点之一。但也有些开发者在使用Python时&#xff0c;会遇到一些需要花费资金的情况。那么&#xff0c;Python到底花钱…

python基础学习10【哑变量处理、离散化(等宽法、等频法、基于聚类分析的方法)、fit()、聚类模型评价指标、 分类模型评价指标、ROC曲线】

哑变量处理 特点&#xff1a;对于一个类别型特征&#xff0c;若其取值有m个&#xff0c;则经过哑变量处理后就变成了m个二元特征&#xff0c;并且这些特征互斥&#xff0c;每次只有一个激活&#xff0c;这使得数据变得稀疏。 get_dummise()函数&#xff1a; pd.get_dummies(…

Ubuntu20.04安装ros系统,使用dvs_ros软件包

Ubuntu20.04安装ros系统 确保Ubuntu系统已经更新配置好合适的软件源 添加ros软件源&#xff1a; sudo sh -c . /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest…

2023省赛-运维-溯源取证-日志分析

2023省赛-运维-溯源取证-日志分析 一、概要 1、标题&#xff1a;日志分析 2、关键字&#xff1a;access.log日志分析 3、比赛&#xff1a;2023省赛 4、工具&#xff1a;awk、cat 二、开始 1、题目分析 apache或nginx的access.log分析。使用最多的就是awk命令和cat命令。 其…

Java中==和equals的区别,包装类对比、String和new String

对于这个问题&#xff0c;我们得了解基本类型和引用类型在内存中的结构&#xff0c;具体如下&#xff1a; 引用对象句柄访问&#xff1a; 引用对象直接指针访问&#xff1a; 可以看出&#xff0c;无论哪种方式访问基本类型和引用类型的实例数据&#xff0c;基本类型的内存上是…

Spring Framework远程代码执行漏洞(CVE-2022-22965)

Spring Framework远程代码执行漏洞&#xff08;CVE-2022-22965&#xff09; 一、漏洞描述 springframework 是spring 里面的一个基础开源框架&#xff0c;主要用于javaee的企业开发。 2022年3月30日&#xff0c;Spring框架曝出RCE 0day漏洞&#xff0c;攻击者通过该漏洞可远…

计网之基础篇

因特网协议概述 常用协议应用层HTTP&#xff08;超文本传输协议&#xff09;、FTP&#xff08;文件传输协议&#xff09;、SMTP&#xff08;简单邮件传输协议&#xff09;、DNS&#xff08;域名系统&#xff09;、DHCP&#xff08;动态主机配置协议&#xff09;、SNMP&#xff…

erlang安装问题(State machine user_ dru terminating)

输入erl 出现错误 State machine user_ dru terminating 主要原因是安装的erlang版本太高导致&#xff0c;建议选择对应rabbitmq并且是中版本的。新版本会有各种各样适配问题。如果现在26 建议选用25中间 对应rabbitmq低一个版本&#xff0c;稳定性更好

螺旋矩阵(顺时针遍历矩阵)

leetcode 54.螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 和剑指office29题相似&#xff1b; 思路&#xff1a;既然是顺时针遍历一圈&#xff0c;那么我们就分别从上边&#xff0c;右边&#xff0c;下…

SQL-游标-更新删除-多列指向

--切换数据库 use MyDatabase--创建游标(scroll&#xff1a;滚动游标) declare mycur cursor scroll for select EmpNo from Employee --打开游标 open mycur --关闭游标 close mycur --删除游标 deallocate mycur--提取第一行 --利用游标进行数据的修改 fetch absolute 2 from…

【django中处理静态的数据 css js img】

django中处理静态的数据 css js img 1.创建django项目2.打开项目3.配置settingpy中找到STATIC_URL3.1静态资源 4.创建静态资源文件夹5.开启服务6. 网页请求7.使用模板 进行编写 并请求8.在模板中进行 图片的请求9.模板中使用动态url {% static %}10 static的 动态url加载 1.创建…

C++读取易语言字节集图片opencv识别滑块

易语言字节集在C中其实是字节数组的形式&#xff0c;这边做的是一个本地滑块识别的&#xff0c;识别已经实现&#xff0c;主要解决读入字节集的问题&#xff0c;因为图片的大小问题&#xff0c;直接传字节集恐怕不行&#xff0c;所以在易语言处理图片&#xff0c;然后在内容中C…

软考高级系统架构设计师(九) 作文模板-微服务架构(待继续完善)

目录 举一反三-论微服务架构及其应用 ps: 更多微服务信息 ps: 微服务与SOA区别 微服务架构举例 微服务的落地技术 微服务的技术可大致分为五类 举一反三-论微服务架构及其应用 论微服务架构及其应用 微服务提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间互相…

vue 将登录后信息放入cookie中,后端请求接口携带

第一步 import Cookies from "js-cookie";//将需要的信息放入cookie Cookies.set("deptId", res.user.dept.deptId, { expires: 30 });引入cookies import Cookies from "js-cookie";// 查询参数queryParams: {deptName: undefined,status: un…

Rust语言从入门到入坑——(9)Rust 生命周期

文章目录 0、引入1、生命周期注释2、结构体中使用字符串切片引用3、静态生命周期4、泛型、特性与生命周期协同作战5、总结 0、引入 Rust 生命周期机制是与所有权机制同等重要的资源管理机制&#xff0c;之所以引入这个概念主要是应对复杂类型系统中资源管理的问题。 引用是对…

【云原生丶Docker】DockerFile完全指南

DockerFile构建过程 DockerFile 是Docker的一个配置文件&#xff0c;本质上来说它只是一个文本文件&#xff0c;它是用来构建Docker镜像的。DockerFile配置文件中包含了一系列的指令和配置信息&#xff0c;用于描述如何构建镜像以及如何运行容器。通过编写 Dockerfile&#xf…