冒泡排序详解

1.引入

  当我们创建一个数组时,我们可能会发现这个数组的元素顺序可能不固定,这个时候就需要我们给数组排序,给数组排序的方法有很多种,这里今天我们先来介绍一下最简单的一种排序方法,即冒泡排序。

  冒泡排序顾名思义,即像小鱼吐泡泡一样,泡泡慢慢飘上来,一个接着一个,冒泡排序便是通过比较相邻两个数的大小,轮完一遍后,会将最大的数放到前面,然后接着再轮上第二遍,把第二大的放到相应位置,以此类推。

2.代码实现

void bubble_sort(int arr[], int sz)//参数接收数组元素个数{int i = 0;for(i=0; i<sz-1; i++){int j = 0;for(j=0; j<sz-i-1; j++){if(arr[j] > arr[j+1]){int tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}}
}
int main()
{int arr[] = {3,1,7,5,8,9,0,2,4,6};int sz = sizeof(arr)/sizeof(arr[0]);bubble_sort(arr, sz);
for(i=0; i<sz; i++){printf("%d ", arr[i]);}return 0;}

  这里要说明一点,我们知道通过形参是无法改变实参的,但是数组访问的本质,就是通过数组名代表首个元素的地址进行加上i来寻找元素的,所以这里实际上不是形参,而是函数在使用时通过地址访问到相应的元素直接进行更改。

  但是这里我们不难推出,实际上即便你的数字按照顺序排好,再调用上述函数时也要执行很多遍,但这也增加了程序的工作量,在这里我们可以进行一个优化,就是可以判断数组是否需要进行排序,或者在排序的过程中,省略一些步骤。

  有:

void bubble_sort(int arr[], int sz)//参数接收数组元素个数{int i = 0;for(i=0; i<sz-1; i++){int flag = 1;//假设这⼀趟已经有序了int j = 0;for(j=0; j<sz-i-1; j++){if(arr[j] > arr[j+1]){flag = 0;//发⽣交换就说明,⽆序int tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}if(flag == 1)//这⼀趟没交换就说明已经有序,后续⽆序排序了break;}
}
int main()
{int arr[] = {3,1,7,5,8,9,0,2,4,6};int sz = sizeof(arr)/sizeof(arr[0]);bubble_sort(arr, sz);for(i=0; i<sz; i++){printf("%d ", arr[i]);}return 0; 
}

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

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

相关文章

vscode配置c++环境

我现在觉得vscode确实很好用&#xff0c;所以python和c都是用的这个。 首先是安装vs&#xff1a; 官网寻找即可&#xff1a;https://code.visualstudio.com/ 安装好后需要装一些插件&#xff1a; 装上这两个插件&#xff0c;c/c&#xff0c;code runner 接着安装c编译器mi…

canvas基础:绘制虚线

canvas实例应用100 专栏提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。 canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重要的帮助。 文章目录 示例…

一些常见的爬虫库

一些常见的爬虫库&#xff0c;并按功能和用途进行分类&#xff1a; 通用爬虫库&#xff1a; Beautiful Soup&#xff1a;用于解析HTML和XML文档&#xff0c;方便地提取数据。Requests&#xff1a;用于HTTP请求&#xff0c;获取网页内容。Scrapy&#xff1a;一个强大的爬虫框架…

Python爬虫教程27:秀啊!用Pandas 也能爬虫??

说到爬虫&#xff0c;大家可能都知道requests、re、scrapy、selenium等等一些工具库。虽然它低调&#xff0c;但功能非常强大&#xff0c;用于抓取Table表格型数据时&#xff0c;简直是个神器&#xff0c;没有必要去F12研究HTML页面结构甚至写正则表达式解析字段。 #我的Pytho…

Python教程78:聊聊exec和eval()函数,有什么用法区别

exec 和 eval 是 Python 中的两个内置函数&#xff0c;它们都可以执行Python代码&#xff0c;但它们的使用方式和目的有所不同。 1.exec()函数用于执行动态的 Python 代码&#xff0c;你可以使用exec来执行存储在字符串或对象代码中的 Python 代码。exec 不会返回任何结果&…

BigDecimal

用于解决小数运算中&#xff0c;出现的不精确问题。 创建对象 new BigDecimal(double val)&#xff1a;不用&#xff0c;无法解决不精确问题。 new BigDecimal(String val)&#xff1a;推荐 BigDecimal.valueOf(double val)&#xff1a;推荐 常用方法 加法&#xff1a;add(Bi…

【嵌入式-51单片机】常见位运算和数据类型以及sbit使用

51单片机中 数据类型如下&#xff1a; 位运算符如下&#xff1a; 按位左移<<&#xff1a;低位补零&#xff0c;高位移出 按位右移>>&#xff1a;高位补零&#xff0c;低位移出 按位与&&#xff1a;对应位上的值必须同时为1才为1&#xff0c;可以用来对指定位…

【2023年修正版】哈夫曼编码详解

霍夫曼编码的原理就是根据字符的使用频率&#xff0c;排成二叉树&#xff0c;使用次数少的放到后面&#xff0c;使用次数多的离根节点越近&#xff1b;这样字符的占位也相应的较少。 首先&#xff0c;主要操作是找每次字符中使用频率最低的&#xff08;数最小&#xff09;两个数…

ASEM工控机维修工业电脑控制器维修PB3400

ASEM工控机维修asem工业电脑维修常见型号&#xff1a;PB3400;PB2000;PB3200;PB3600&#xff1b;BM2200等。 ASEM工控机维修常见故障有&#xff1a;开不了机、黑屏、不能启动、电路板故障、主板、开机没反应、显示器没反应、主板故障、蓝屏、卡机、显示器信号灯一直闪、系统不能…

180天Java从小白到就业-Day03-03Java位运算符、赋值运算符、数据交换的三种方式

1. 位运算符 Q&#xff1a;为什么要学习位运算 A&#xff1a;由于其运算效率更高&#xff0c;在JDK源码&#xff08;例如ArrayList、HashMap&#xff09;中大量使用位运算&#xff0c;想要看懂JDK源码必须懂位预算&#xff0c;但是在公司开发业务系统时位运算使用并不多。 Q…

java Lock锁的使用

Lock接口 public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException; void unlock(); Condition newCondition(); }这 5 种方法分别是 lock(…

网络虚拟化场景下网络包的发送过程

网络虚拟化有和存储虚拟化类似的地方&#xff0c;例如&#xff0c;它们都是基于 virtio 的&#xff0c;因而在看网络虚拟化的过程中&#xff0c;会看到和存储虚拟化很像的数据结构和原理。但是&#xff0c;网络虚拟化也有自己的特殊性。例如&#xff0c;存储虚拟化是将宿主机上…

python绘制箱线图boxplot——用于多组数据的比较, 异常值检测

python绘制箱线图boxplot——用于多组数据的比较, 异常值检测 介绍箱线图方法简介箱线图适用范围seaborn.boxplot箱图外观设置异常值marker形状、填充色、轮廓设置完整代码 如下matplotlib.pyplot常见参数介绍 本文系统详解利用python中seaborn.boxplot绘制箱图boxplot。seab…

跟着chatgpt一起学|2.clickhouse入门(1)

上周我们一起学习了spark&#xff0c;这周让chatgpt帮我们规划下clickhouse的学习路径吧&#xff01; 目录 ​编辑 1.了解Clickhouse的基本概念 1.1 Clickhouse是什么&#xff1f; 1.2 ClickHouse的特点和优势 1.3 Clickhouse的基本架构与组件 1.了解Clickhouse的基本概念…

链式队列的结构设计及基本操作的实现(初始化,入队,出队,获取元素个数,判空,清空,销毁)

目录 一.链式队列的设计思想 二.链式队列的结构设计 三.链式队列的实现 四.链式队列的总结 一.链式队列的设计思想 首先一定要理解设计的初衷,就是队头队尾的位置要满足怎么快怎么设计.那么分析如下: 最终我们敲定了入队,出队的时间复杂度都为O(1)的一种设计,也就是第四种设…

LDO版图后仿性能下降

记录一下LDO&#xff0c;debug 问题1&#xff1a; LDO后仿输出电压下降&#xff0c;前仿输出1.8V&#xff0c;后仿却输出只有1.58V。 解决办法&#xff1a; 功率管的走线问题&#xff0c;布线太少&#xff0c;存在IR drop问题。功率管的面积比较大&#xff0c;需要横竖都多…

面试--各种场景问题总结

1.在开发过程中&#xff0c;你是如何保证机票系统的正常运行的&#xff1f; 用户、测试、监控和日志、安全措施、数据备份、系统设计、需求分析 2.在机票系统开发过程中&#xff0c;你最有成就的事情&#xff0c;为什么&#xff1f; 用户体验感、高可用和稳定性、客户满意度、系…

什么情况下会导致索引失效

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

SSM实战项目,基于Spring+SpringMVC+mybatis实现的人事管理系统源码+数据库+使用说明

SSM实战项目&#xff1a;人事管理系统&#xff08;蓝色版&#xff09; 一、员工管理系统项目说明&#xff1a; 该项目主要是完成SpringSpringMVCmybatis的完整整合&#xff0c;功能实现比较单一&#xff0c;就是一个完成增删改查的小项目&#xff01; 完整代码下载地址SSM实…

Python zip函数及用法与lambda表达式及用法

Python zip函数及用法 zip() 函数可以把两个列表“压缩”成一个 zip 对象&#xff08;可迭代对象&#xff09;&#xff0c;这样就可以使用一个循环并行遍历两个列表。为了测试 zip() 函数的功能&#xff0c;我们可以先在交互式解释器中“试验”一下该函数的功能。 >>&g…