【排序】冒泡排序

news2024/11/25 23:30:30

在我们的生活中,到处都离不开排序的作用,考试分数要排序,商场购物要排序,可以说排序对我们来说处处存在,那么从本章开始,我将要依次分享一些排序方法,从易到难,包括冒泡,插入,快速,希尔,选择等排序方法,希望大家能够支持。

目录

排序的相关概念

常见的排序方法

冒泡排序

1.逻辑:

2.优化:

3.代码实现:

4.动态图像:

小结

排序的相关概念

我们先来简单认识一下,什么是排序

排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
 

内部排序:数据元素全部放在内存中的排序。
 

外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不断地在内外存之间移动数据的排

常见的排序方法

看一下常见的排序方法

冒泡排序

今天我们要介绍的最基本的排序——冒泡排序

冒泡排序(Bubble Sort),由于其排序方法中,数据像气泡一样,根据自身的大小,一点一点的像数组另一端移动,就像是气泡从水底向水面冒出的效果,因此称为冒泡排序

冒泡排序(以排升序为例)

1.逻辑:

单趟排序:让前数与后面的数进行比较,若后面的数小于前面的数就交换位置,再继续向后遍历

 通过上面的逻辑图,我们可以看出来,单趟冒泡排序的逻辑,很显然,他会将最大的数找出来放到最后

我们需要嵌套两层循环,内层控制单趟排序的逻辑,外层控制整个排序的次数

内层循环:即单趟排序的逻辑,假设我们有n个未排序的数据,我们从0下标依次进行比较,若前者大于后者,就交换二者的位置

注意:一共有n个数据,那么只需要排n-1次

而每次内层循环会将最大的数放到数组最后,因此每进行依次内层循环,未排序的数据就 -1,这个我们就可以在外层循环来记录这个数据,假设这是第i次排序,那么就一共需要比较 n - i - 1次。

外层循环:外层排序,即多次实现内层排序,然后使数据达到有序的过程,一共有n个数据,就需要执行n-1次,最后一个数据的位置就是合适的位置,因此他不需要再进行排序,那么总共需要n-1次外层循环

2.优化:

当在一次大循环中,没有数据进行交换,说明数组中的数据已经排序完成,不需要继续执行之后的循环次数,所以我们可以用一个flag变量初始化为1,若在大循环中交换数据,就将其置为0,每次在内层循环结束后进行判断,若flag == 1说明没有数据进行交换,已排序完成,就break跳出循环

3.代码实现:

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

4.动态图像:

如下:

小结

由代码我们可以发现,冒泡排序的时间复杂度为O(n^2),这相比于其他更为高级的排序,效率过低,因此冒泡排序的实践意义,几乎为0,大多用来进行教学,冒泡排序是最为基础的一个排序,重在理解排序的过程和逻辑

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

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

相关文章

Linux 编译安装python

以deepin操作系统安装Python3.8.10为例。 下载 python3.8.10 官网下载 Linux要下载源码&#xff0c;进行编译。 下图tarball即tar包&#xff0c;是压缩包的意思。python官网给出两种压缩格式的tarball&#xff0c;下载哪个都可以。 方式一&#xff1a;直接点击链接下载 方式…

中间件复习之-消息队列

消息队列在分布式架构的作用 消息队列&#xff1a;在消息的传输过程中保存消息的容器&#xff0c;生产者和消费者不直接通讯&#xff0c;依靠队列保证消息的可靠性&#xff0c;避免了系统间的相互影响。 主要作用&#xff1a; 业务解耦异步调用流量削峰 业务解耦 将模块间的…

线上 | OpenSergo - [规范]

INDEX 1 参考资料2 OpenSergo 与 Sentinel 关系3 规范体系3.1 服务元数据ReportMetadataRequest 信息![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ffba569841ae4668b4cff74e4d41d21f.png)##### ReportMetadataReply 信息![在这里插入图片描述](https://img-blog…

链表相交00

题目链接 链表相交 题目描述 注意点 题目数据保证整个链式结构中不存在环函数返回结果后&#xff0c;链表必须保持其原始结构设计一个时间复杂度 O(n) 、仅用 O(1) 内存的解决方案 解答思路 双指针分别指向headA和headB&#xff0c;当遍历完某个链表后&#xff0c;将指针指…

【面结构光三维重建】0.基于openCV实现相机的标定

1.标定结果 2.相机标定原理 相机标定是计算机视觉和机器视觉领域中的重要技术,用于确定相机成像的几何关系和畸变特性,以提高成像的精度和稳定性。该技术广泛应用于三维重建、机器人视觉、自动驾驶等领域。 世界坐标系:由用户定义的三维世界坐标系,描述物体和相机在真实世…

生产现场的作业标准化,这么做就对了!

制造型企业的生产过程是以计划的成本、工时生产出达到客户要求的产品。如果在制造过程中&#xff0c;产品工艺、作业方法或作业条件有所变化的话&#xff0c;一定无法生产出符合上述要求的产品。 因此&#xff0c;公司领导必须对作业工艺流程、作业方法、作业条件进行标准化管…

无缝接入GPT-4o:智创聚合API平台的创新与实践

在2024年5月13日&#xff0c;美国开放人工智能研究中心&#xff08;OpenAI&#xff09;发布了最新版本的ChatGPT——GPT-4o。这一更新标志着人工智能领域的又一重大进步&#xff0c;引起了全球科技界的广泛关注。GPT-4o的“o”代表“omni”&#xff08;全能&#xff09;&#x…

ARM-V9 RME(Realm Management Extension)系统架构之系统能力的设备隔离和保护

安全之安全(security)博客目录导读 目录 三、设备隔离和保护 1、外设隔离 2、非pe请求者(设备) 3、可编程完成端过滤器Programmable completer-side filters 4、RME设备分配 4.1 设备权限表 本博客探讨 RME 所需系统能力的设备隔离和保护&#xff0c;以保证 Arm CCA 对于…

辅导男朋友转算法岗的第2天|self Attention与kv cache

文章目录 公式KV CacheMHA、MQA、GQA 面试题为什么除以 d k \sqrt{d_k} dk​ ​Multihead的好处decoder-only模型在训练阶段和推理阶段的input有什么不同&#xff1f;手撕必背-多头注意力 公式 $ \text{Output} \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) \times …

SG7050EEN差分晶体振荡器:为5G路由器提供卓越的时钟源

随着5G技术的快速发展&#xff0c;5G路由器作为连接高速网络的重要设备&#xff0c;正迅速普及。为了确保5G路由器在高宽带和低延迟的网络环境中表现出色&#xff0c;选择一款高性能的晶体振荡器至关重要。爱普生推出的SG7050EEN差分晶体振荡器&#xff0c;以其高精度、低相位噪…

K210视觉识别模块学习笔记2:固件的下载升级_官方数字识别例程导入方法

今日开始学习K210视觉识别模块:固件的下载升级_官方数字识别例程导入方法 主要学习如何升级固件库&#xff0c;在哪下载固件库&#xff0c;以及如何在TF卡正确导入官方例程&#xff1a; 亚博智能的K210视觉识别模块...... 本次最终目的是正确导入官方的数字识别例程&#xff0…

Python 之SQLAlchemy使用详细说明

目录 1、SQLAlchemy 1.1、ORM概述 1.2、SQLAlchemy概述 1.3、SQLAlchemy的组成部分 1.4、SQLAlchemy的使用 1.4.1、安装 1.4.2、创建数据库连接 1.4.3、执行原生SQL语句 1.4.4、映射已存在的表 1.4.5、创建表 1.4.5.1、创建表的两种方式 1、使用 Table 类直接创建表…

小程序使用Canvas设置文字竖向排列

在需要使用的js页面引入js文件,传入对应参数即可 /** * 文本竖向排列 */ function drawTextVertical(context, text, x, y) {var arrText text.split();var arrWidth arrText.map(function (letter) {return 26; // 字体间距,需要自定义可以自己加参数,根据传入参数进行…

飞凌嵌入式FET3568/3568J-C核心板现已适配OpenHarmony4.1

近日&#xff0c;飞凌嵌入式为FET3568/3568J-C核心板适配了OpenHarmony4.1系统&#xff0c;新系统的加持使核心板在兼容性、稳定性与安全性等方面都得到进一步提升&#xff0c;不仅为FET3568/3568J-C核心板赋予了更强大的功能&#xff0c;也为开发者们提供了更加广阔的创新空间…

WordPress中借助Table of Contents Plus+Widget Options插件,实现仅在文章侧边栏显示文章目录的功能

本文转自博主的个人博客&#xff1a;https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接&#xff1a;点我访问 序言&#xff1a;今天心血来潮&#xff0c;写了一篇文章&#xff0c;忽然发现自己的文章极少有目录&#xff0c;这对于长文章的阅读来说是十分不利的&#…

vivado 时序约束

时间限制 以下ISE设计套件时序约束可以表示为XDC时序约束 Vivado设计套件。每个约束描述都包含一个UCF示例和 等效的XDC示例。 在未直接连接到边界的网络上创建时钟时&#xff0c;UCF和XDC不同 的设计&#xff08;如端口&#xff09;。在XDC中&#xff0c;当在上定义带有create…

微信小程序发送订阅消息

小程序后台。订阅消息里面&#xff0c;新建一个消息模板 小程序代码&#xff0c;登录后&#xff0c;弹出订阅信息 requestSubscribeMessage: function () {wx.requestSubscribeMessage({tmplIds: [-323232-32323], // 替换为你的模板IDsuccess(res) {// 用户订阅结果console.l…

【康耐视国产案例】Nvidia/算能+智能AI相机:用AI驱动 | 降低电动车成本的未来之路

受环保观念影响、政府激励措施推动与新能源技术的发展&#xff0c;消费者对电动汽车(EV)的需求正在不断增长&#xff0c;电动汽车已经成为了未来出行方式的重要组成部分。然而&#xff0c;电动汽车大规模取代燃油汽车的道路还很漫长。最大的障碍就是电动汽车的售价相对过高。尽…

day2数据结构

双链表的插入 循环链表&#xff0c;判断循环链表是否为空 指向的是自己 仅设表尾指针的循环链表合并 代码举例 删除线性表的最小值&#xff0c;并由函数返回删除的值&#xff0c;空的位置&#xff0c;由最后一个元素填补&#xff0c;若表为空显示出错信息 &L 因为L会发生…

深入理解flask规则构建与动态变量应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、Flask规则基础 1. 静态规则与动态规则 2. 规则语法与结构 三、动态变量应用…