冒泡排序——简单理解和使用

阅前声明:如果想直接了解冒泡排序的简化思想,请跳至文章尾部

在介绍之前,我们先看一个用到该功能的实战训练(本人也是从中开始认识到冒泡排序这个函数定义)

对于小白来说,我的思路如下:

1.题目中涉及到三个数组,首先scanf两个整型变量m,n,其次定义三个变长数组arr[m + n] 、arr1[m] 、arr2[n];

2.我们了解到一个关键信息,两个输入的数组为升序类型,那么考虑两个数组中同下标值的元素进行比较,然后根据他们比较的结果在arr中进行元素输入;

具体操作编码如下:(为错误示范,可以理解和纠正一下编码思路)

void input_arr(int arr[], int a,int b)
{for (a = 0; a < b; a++){scanf("%d", &arr[a]);}
}
int smaller(int a, int b)
{if (a >= b)return b;elsereturn a;
}
int bigger(int a, int b)
{if (a >= b)return a;elsereturn b;
}
void print(int a , int arr[])
{int i;for (i = 0; i < a; i++){printf("%d ", arr[i]);}
}
int main()
{int m, n;scanf("%d %d", &m, &n);int arr1[m];//先将三个数组定义出来int arr2[n];int arr[m + n];int i,j;input_arr(arr1, i, m);//输入两个数组input_arr(arr2, i, n);int b = smaller(m,n);//先比较m,n;用新赋值的变量去参与后续判断int c = bigger(m,n);for (j = 0; j < c; j++)//利用变量j对arr数组的元素进行输入{if (j < b)//在相同下标区间内,进行大小判断,要将两个同数量的数组比较并放入新的数组中,需要2b个空间,下标位数为2b-1{arr[2 * j ] = smaller(arr1[j], arr2[j]);//先进行一个同下标数的大小判断,小的放在本位上,大的放在+1位上arr[2 * j + 1] = bigger(arr1[j], arr2[j]);if (j >= 1){arr[2 * j] = bigger(smaller(arr1[j], arr2[j]), arr[2 * j - 1]);//将新的小值与前一次的大值进行比较,纠正排序arr[2 * j - 1] = smaller(smaller(arr1[j], arr2[j]), arr[2 * j - 1]);}}//到这里完成了0-2b-1的数值输入,共2b个数else if (j == b){if (b == m) //判断元素数量大的一方数组后,对超出的第一位数组值进行比较{arr[2 * b] = bigger(arr2[b], arr[2 * b - 1]);arr[2 * b - 1] = smaller(arr2[b], arr[2 * b - 1]);}else{arr[2 * b] = bigger(arr1[b], arr[2 * b - 1]);arr[2 * b - 1] = smaller(arr1[b], arr[2 * b - 1]);}}else{if (b == m){arr[2 * b + j - b] = arr2[j];}else{arr[2 * b + j - b] = arr1[j];}}}for (int s = m + n - 1; s > 0; s--){int temp;if (arr[s] < arr[s - 1]){temp = arr[s];arr[s] = arr[s - 1];arr[s - 1] = temp;}}print(m + n, arr);return 0;
}//仅适合升序,且没有相同数的两个数组

在这个输入例子中,编写的代码出现了明显的错误,存在交替的大小变化,这是由于下标值相差太多的元素之间存在漏比较的情况,这是由于我们比较方式的局限性导致的,不要简单的把一个元素集合按照规定的容量分为多个比较区间,进行依次比较后纠正的元素排列就是我们想要的结果,下面是这种错误观念的示意图

一个数字,确定其在整型数组中正确的大小排序和下标值,应该将其和每一个元素进行比较。

那么我们可以得出冒泡排序的关键思想:

假设一个整型数组 中有N个元素,每一个元素确定自己的正确位置需要与剩余的N-1个元素进行比较,而每一个元素都需要完成这个过程 即 实现数组的正确排序,我们需要完成N * (N - 1)次的比较,细分下来就是C语言中的两个for循环的嵌套使用,具体如下:

	for (int a = 0; a < m + n; a++){for (int b = 0; b < m + n - 1; b++){int temp = 0;if (arr[b] > arr[b + 1]){temp = arr[b + 1];//此时的temp仅为存储数据的一个整型变量,无其他特殊含义arr[b + 1] = arr[b];arr[b] = temp;}}}

因此,我们可以简化并且加深对冒泡排序这个代码块的理解。

有表述不当的地方辛苦不吝赐教,三克油。

打怪升级中..................................................................................................................................

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

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

相关文章

AI应用商业化加速落地 2025智能体爆发与端侧创新成增长引擎

今年以来&#xff0c;人工智能 (AI) 正在进入从算力投入到云服务消耗再到商业化收入&#xff0c;最终回到算力再投入的良性循环&#xff0c;而 AI 应用的起量正是推动这一飞轮效应的关键。7 月 31 日&#xff0c;国务院常务会议审议通过了《关于深入实施 “人工智能 ” 行动的意…

Pytest测试框架基础及进阶

Pytest测试框架基础# Pytest测试框架介绍# Pytest是Python一款三方测试框架&#xff0c;用于编写和运行单元测试、集成测试和功能测试。Pytest测试框架具有简单、灵活、易于扩展等特点&#xff0c;被广泛应用于Python项目的测试工作中。 Pytest主要特点&#xff1a; 简单易用…

航空装备先进加工工艺与制造技术论坛——2025成都航空装备展

300参展企业 11500㎡展区面积 7大专业展区 12000观众规模15同期会议 160发言嘉宾 5000参会嘉宾 100媒体报道航空工业飞速发展&#xff0c;先进加工工艺与制造技术成为了支撑航空装备性能提升、质量保障和产能优化的核心基石。为探索前沿技术路径、凝聚行业创新力量&#xff0c;…

为什么品牌更愿意为新品打广告?

品牌资源向新品广告倾斜&#xff0c;可以说是市场上的普遍现象。尤其对于没有明星产品的品牌而言&#xff0c;新品推广时企业的重要曝光节点。下面就让我们一同来了解下&#xff0c;为什么品牌更愿意为新品打广告。一、市场需求更充分新品广告往往承担着市场教育的功能&#xf…

电子电气架构 --- 关于整车信息安全的一些思考

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

报错:Eplan无法打开数据库的解决方法

详细报错信息&#xff1a;无法打开数据库 E:\eplan\部件\Microsoft\ESS_part001.mdb。针对64位版本的EPLAN 平台需要使用64位版本的Microsoft Office. 一、报错及解决方法 报错信息&#xff1a;无法打开数据库 E:\eplan\部件\Microsoft\ESS_part001.mdb。针对64位版本的EPLAN 平…

深度学习篇---卷积核的权重

卷积核权重&#xff1a;在深度学习的卷积操作中&#xff0c;“卷积核的权重” 是最核心的概念之一&#xff0c;它决定了卷积核能从图像中 “看到” 什么特征&#xff08;比如边缘、纹理&#xff0c;甚至是眼睛、车轮这样的复杂结构&#xff09;。我们可以把它理解成卷积核的 “…

SMTPman,smtp ssl助力安全高效邮件传输!

SMTPman&#xff0c;smtp ssl助力安全高效邮件传输&#xff01;SMTPman&#xff0c;smtp ssl不仅仅是一种邮件协议方式&#xff0c;更是企业日常运营的重要支撑。通过SMTPman&#xff0c;smtp ssl&#xff0c;用户可以获得更快的投递速度&#xff0c;更稳定的连接&#xff0c;以…

学习日志37 python

1 Python 和 Java 在类属性&#xff08;静态属性&#xff09;和实例属性的处理题目执行以下程序&#xff0c;输出结果为&#xff08;&#xff09; class Base(object):count 0def __init__(self):pass b1 Base() b2 Base() b1.count b1.count 1 print(b1.count,end" …

对于QPS的理解和简单

QPS&#xff08;Queries Per Second&#xff09; 是衡量系统吞吐量的核心指标&#xff0c;表示每秒能处理的请求数量。以下是关于QPS的完整解析和实践指南&#xff1a;一、QPS的核心公式 QPS 总请求量 / 请求总时间&#xff08;秒&#xff09;典型场景计算&#xff1a; 日请求…

【笔记ing】考试脑科学 脑科学中的高效记忆法

前言本书是拙作《高中生学习法》的修订版。《高中生学习法》出版已有十余年。这期间&#xff0c;脑科学研究不断进步&#xff0c;十几年前无法解释的事情现在已经开始逐渐明晰。同时&#xff0c;书中有些内容甚至已经被明确证实是错误的。也就是说&#xff0c;《高中生学习法》…

Web安全 - 构建安全可靠的API:基于国密SM2/SM3的文件上传方案深度解析

文章目录概述1. 缘起&#xff1a;挑战与目标2 . 核心架构&#xff1a;非对称签名与摘要算法的珠联璧合威胁模型&#xff08;我们要防的攻击&#xff09;密钥管理体系3 . 签名与验证&#xff1a;一步一解&#xff0c;安全闭环3.1 A系统&#xff1a;签名的生成&#xff08;请求前…

【MyBatis-Plus】一、快速入门

这里写自定义目录标题MyBatis-Plus 概述快速入门入门案例常用注解常见配置MyBatis-Plus 概述 MyBatis-Plus 简介&#xff1a; MyBatis-Plus 是在 MyBatis 基础上开发的一个 增强工具包&#xff0c;它简化了 MyBatis 的开发&#xff0c;减少了大量重复代码。它保持了 MyBatis …

PostgreSQL导入mimic4

一、PostgreSQL连接验证 正确连接命令 使用psql工具连接目标数据库&#xff0c;格式为&#xff1a;psql -h 127.0.0.1 -U 用户名 -d 数据库名 --password 示例&#xff08;用户名Shinelon&#xff0c;数据库mimic&#xff09;&#xff1a;psql -h 127.0.0.1 -U Shinelon -d mi…

css中 hsl() 的用法

好的 &#x1f44d; 我来详细介绍一下 CSS hsl() 的用法。1. 基本语法 color: hsl(hue, saturation, lightness);hue&#xff08;色相&#xff09; 取值范围&#xff1a;0 ~ 360&#xff08;角度值&#xff0c;代表色环的角度&#xff09;0 或 360 → 红色120 → 绿色240 → 蓝…

企业级Spring事务管理:从单体应用到微服务分布式事务完整方案

企业级Spring事务管理&#xff1a;从单体应用到微服务分布式事务完整方案 &#x1f31f; 你好&#xff0c;我是 励志成为糕手 &#xff01; &#x1f30c; 在代码的宇宙中&#xff0c;我是那个追逐优雅与性能的星际旅人。 ✨ 每一行代码都是我种下的星光&#xff0c;在逻辑的土…

继续记录面试题

坐在工位&#xff0c;没事干心慌的不行&#xff0c;可能也是房贷压的。一闲下来就开始胡思乱想&#xff0c;无法沉下心去背那些八股文。这才刚刚接到离职通知第三天啊。而且、我还在坐班呢&#xff01;&#xff01;&#xff01; 哎、怪不得有句老话说的&#xff0c;人穷志短&a…

从零开始学习:深度学习(基础入门版)(第2天)

&#xff08;一&#xff09;在pycharm软件中&#xff0c;用python语言&#xff0c;opencv库实现以下功能(1.1)图片的边界填充核心流程&#xff1a;读取原始图像使用 cv2.imread() 加载名为 yueshan.png 的图像文件统一边界参数设定四周留白尺寸均为 50px&#xff08;上下左右各…

HTTP协议-3-HTTP/2是如何维持长连接的?

先说结论&#xff1a;HTTP/2的“长连接” 一个TCP连接 多路复用 二进制帧 流控制 持久会话管理 它不只是“连接不断”&#xff0c;更关键的是&#xff1a;在这个长连接上&#xff0c;可以同时并发传输成百上千个请求和响应&#xff0c;互不阻塞&#xff01; 1、HTTP/2的“…

图解希尔排序C语言实现

1 希尔排序 希尔排序&#xff08;Shell Sort&#xff09;是D.L.Shell于1959年提出来的一种排序算法&#xff0c;在这之前排序算法的时间复杂度基本都是O(n)&#xff0c;希尔排序算法是突破这个时间复杂度的第一批算法之一。 1.1 基本概念与原理 希尔排序通过将原始列表分割成若…