数据结构与算法:2,冒泡排序

以从小到大排序为例:

冒泡排序步骤:

1,从左到右(或从右到左)对比相邻两个数,左边的数 大于 右边的数 则交换位置

2,重复第一个步骤

  ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​

看代码: 

1,从左到右(或从右到左)对比相邻两个数,左边的数 大于 右边的数 则交换位置

#include<iostream> 
int main()
{//示例  从小到大排序int x[10] = { 3,4,45,5,43,23,24,2543,25,342 };for (int i = 0;i < 10;i++){if (i == 9)break;//最后一个值  没有i+1  加上这句,防止数组引用时 溢出if (x[i] > x[i + 1]){int 临时存储 = x[i];x[i] = x[i + 1];x[i + 1] = 临时存储;}}//输出数组中每个值 看看效果for (int i=0;i<10;i++){std::cout << x[i] << " ";}std::cout<<std::endl;return 0;
}

2,重复第一个步骤

#include<iostream> 
int main()
{//示例  从小到大排序int x[10] = { 3,4,45,5,43,23,24,2543,25,342 };for (int j = 0;j < 10;j++)//步骤2{for (int i = 0;i < 10;i++)//步骤1 {if (i == 9)break;//最后一个值  没有i+1  加上这句,防止数组引用时 溢出if (x[i] > x[i + 1]){int 临时存储 = x[i];x[i] = x[i + 1];x[i + 1] = 临时存储;}}}//输出数组中每个值 看看效果for (int i=0;i<10;i++){std::cout << x[i] << " ";}std::cout<<std::endl;return 0;
}

用类来实现

#include<iostream> class A
{
public:int x[10];A()//构造函数里 初始化数组中的值{x[0] = 3,x[1] = 4,x[2] = 45,x[3] = 5,x[4] = 43,	x[5] = 23,x[6] = 24,x[7] = 2543,x[8] = 25,x[9] = 342;}void 输出(){for (int i = 0;i < 10;i++)std::cout << x[i] << " ";std::cout << std::endl;}void 交换(int 位置a, int 位置b){int c= x[位置a];x[位置a] = x[位置b];x[位置b] = c;}void 把最大值往右移(int 结束位置){for (int i = 0; i < 结束位置;i++){//if (i == 结束位置)break;//最后一个值  没有i+1  加上这句,防止数组引用时 溢出if (x[i] > x[i + 1]){交换(i, i + 1);}}}void 开始冒泡排序()//这里演示 从大到小排序{for (int i = 9; i>=0;i--){把最大值往右移(9);输出();//展示一下 每次移到后的 数组}}
};
int main()
{A a;std::cout << " 开始前 \n";a.输出();//排序前 输出一下 看看效果std::cout << " 排序中 \n";a.开始冒泡排序();std::cout << " 完成 \n";a.输出();//排序后 输出一下 看看效果return 0;
}

优化一下,减少计算次数,先看代码,(代码 下面有解析)

#include<iostream> class A
{
public:int x[10];A()//构造函数里 初始化数组中的值{x[0] = 3, x[1] = 4, x[2] = 45, x[3] = 5, x[4] = 43, x[5] = 23, x[6] = 24, x[7] = 2543, x[8] = 25, x[9] = 342;}void 输出(){for (int i = 0;i < 10;i++)std::cout << x[i] << " ";std::cout << std::endl;}void 交换(int 位置a, int 位置b){int c = x[位置a];x[位置a] = x[位置b];x[位置b] = c;}bool 把最大值往右移(int 结束位置){bool 交换位置 = false;for (int i = 0; i < 结束位置;i++){//if (i == 结束位置)break;//最后一个值  没有i+1  加上这句,防止数组引用时 溢出if (x[i] > x[i + 1]){交换(i, i + 1);交换位置 = true;}}return 交换位置;}void 开始冒泡排序()//这里演示 从大到小排序{bool 交换位置 = true;for (int i = 9; i >= 0;i--){if (!把最大值往右移(9))break;输出();//展示一下 每次移到后的 数组}}
};
int main()
{A a;std::cout << " 开始前 \n";a.输出();//排序前 输出一下 看看效果std::cout << " 排序中 \n";a.开始冒泡排序();std::cout << " 完成 \n";a.输出();//排序后 输出一下 看看效果return 0;
}

解析:

之前的代码 也优化一下:

#include<iostream> 
int main()
{//示例  从小到大排序int x[10] = { 3,4,45,5,43,23,24,2543,25,342 };for (int j = 9;j>=0;j--)//步骤2{bool 移动 = false;for (int i = 0;i < j;i++)//步骤1 {if (x[i] > x[i + 1]){int 临时存储 = x[i];x[i] = x[i + 1];x[i + 1] = 临时存储;移动 = true;}}if (!移动)break;}//输出数组中每个值 看看效果for (int i = 0;i < 10;i++){std::cout << x[i] << " ";}std::cout << std::endl;return 0;
}

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

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

相关文章

从春招“AI热潮”看科技变革中的就业新趋势

随着2025年春招市场的火热进行&#xff0c;人工智能&#xff08;AI&#xff09;相关岗位成为求职市场上的“香饽饽”&#xff0c;引发了社会各界的广泛关注。这一现象背后&#xff0c;不仅反映了AI技术的快速发展&#xff0c;更揭示了科技变革对就业市场带来的深远影响。从春招…

人工智能之数学基础:矩阵的相似变换

本文重点 矩阵的相似变换是线性代数中一个至关重要的概念,它揭示了矩阵之间的一种特殊关系,并通过可逆矩阵将一个矩阵转化为另一个相似矩阵,同时保持矩阵的某些本质特征不变。在机器学习领域,矩阵的相似变换发挥着不可或缺的作用,广泛应用于数据降维、聚类分析、分类推荐…

docker torcherve打包mar包并部署模型

使用Docker打包深度网络模型mar包到服务端 参考链接&#xff1a;Docker torchserve 部署模型流程——以WSL部署YOLO-FaceV2为例_class myhandler(basehandler): def initialize(self,-CSDN博客 1、docker拉取环境镜像命令 docker images出现此提示为没有权限取执行命令&…

JAVA实现动态IP黑名单过滤

一些恶意用户(可能是黑客、爬虫、DDoS 攻击者)可能频繁请求服务器资源&#xff0c;导致资源占用过高。因此需要一定的手段实时阻止可疑或恶意的用户&#xff0c;减少攻击风险。 通过 IP 封禁&#xff0c;可以有效拉黑攻击者&#xff0c;防止资源被滥用&#xff0c;保障合法用户…

RocketMQ可视化工具使用 - Dashboard(保姆级教程)

1、github拉取代码&#xff0c;地址&#xff1a; https://github.com/apache/rocketmq-dashboard 2、指定Program arguments&#xff0c;本地启动工程 勾上这个Program arguments&#xff0c;会出现多一个对应的框 写入参数 --server.port1280 --rocketmq.config.namesrvAddr…

湖南(源点咨询)市场调研 商业综合体定位调研分享(上篇)

​ 该项目位于某新一线城市的城市副中心区域&#xff0c;系一个正在发展中的中央居住区&#xff0c;项目本身是一个涵盖社区综合服务中心、商业、文体活动中心、卫生服务、社区养老等多功能复合的公共配套项目&#xff0c;本次调研主要针对其商业&#xff08;及其他可商用的&a…

硬件测试工装设计不合理的补救措施

硬件测试工装设计不合理的补救措施主要包括重新评估设计需求、优化工装结构、强化工装校准与验证。其中&#xff0c;优化工装结构尤其重要&#xff0c;通过结构优化能够有效解决因设计不合理导致的测试准确性下降和可靠性不足的问题。根据工程实践数据&#xff0c;经过优化结构…

PyQt6实例_批量下载pdf工具_使用pyinstaller与installForge打包成exe文件

目录 前置&#xff1a; 步骤&#xff1a; step one 准备好已开发完毕的项目代码 step two 安装pyinstaller step three 执行pyinstaller pdfdownload.py&#xff0c;获取初始.spec文件 step four 修改.spec文件&#xff0c;将data文件夹加入到打包程序中 step five 增加…

open-cv的安装

python -m pip install numpy matplotlib opencv-python 【记得科学上网&#xff0c;不然太慢了】

AI写一个视频转图片帧工具(python)

现在的AI写python太方便了 说的话 我想用python实现一个能够将视频的所有帧数转化为图片的软件&#xff0c;可以自由配置转换的帧率或者全部&#xff0c;需要有界面&#xff0c;我需要增加一点功能&#xff0c;就是我需要读取出视频的分辨率&#xff0c;然后设置输出帧的分辨…

Axure RP9.0教程: 多级联动【设置选项改变时->情形->面板状态】(给动态面板元件设置相关交互事件的情形,来控制其他面板不同的状态。)

文章目录 引言I 多级联动(省、市、区)实现思路添加三省、市、区下拉列表给省下拉框添加数据源将市、区下拉框添加不同状态,分别以省、市命名给省下拉控件设置选项改变时的交互事件省下拉控件的交互事件情形市下拉交互事件的配置II 知识扩展: 展示省 → 地级市 → 区县的多级…

浙江大学|DeepSeek系列专题公开课|第一季|PDF+视频(全)

大家好&#xff0c;我是吾鳴。 之前吾鳴给大家分享过由浙大出品的DeepSeek系列专题公开课的教程&#xff0c;不过都比较零散&#xff0c;而且都只有PDF&#xff0c;有粉丝朋友直呼看得不过瘾。今天吾鳴把视频也给大家找来了&#xff0c;而且把第一季的DeepSeek系列公开课也稍做…

数据可视化(matplotlib)-------图表样式美化

目录 一、图表样式概述 &#xff08;一&#xff09;、默认图表样式 &#xff08;二&#xff09;、图表样式修改 1、局部修改 2、全局修改 二、使用颜色 &#xff08;一&#xff09;、使用基础颜色 1、单词缩写或单词表示的颜色 2、十六进制/HTML模式表示的颜色 3、RGB…

SpringBoot3解决跨域请求问题(同源策略、JSONP、CORS策略)(Access-Control-Allow-Origin)(2025详细教程)

目录 浏览器跨域请求问题。 浏览器同源策略。 第三方API调用。 前后端分离项目。 一、JSONP。&#xff08;dataType:jsonp&#xff09; &#xff08;1&#xff09;代码示例。 <1>前端ajax04.jsp页面。(发起Ajax请求) <2>后端springboot接口。(/hello)(返回JSONPObj…

rent8_wechat-新增提醒收租功能

本次更新中&#xff0c;rent8_wechat 小程序全新推出了“提醒收租”功能&#xff0c;为房东提供更加便捷的收租体验。房东只需在小程序内点击“提醒收租”按钮&#xff0c;系统便会在需要收租当天的上午9点准时推送通知&#xff0c;贴心提醒房东及时收取租金。 以下是该功能的…

诠视科技MR眼镜如何安装apk应用

诠视科技MR眼镜如何安装apk应用 1、使用adb工具安装1.1 adb工具下载1.2 解压adb文件1.3 使用adb安装apk 2、拷贝到文件夹安装 1、使用adb工具安装 1.1 adb工具下载 点击下面的链接开始下载adb工具&#xff0c;下载结束以后解压文件。 下载链接: https://download.xvisiotech…

JAVA学习*异常

什么是异常 在 Java 里&#xff0c;异常是指程序运行期间出现的不正常状况&#xff0c;它会中断程序的正常执行流程。 异常的分类 Java 中的异常是对象&#xff0c;这些对象都继承自 Throwable类。Throwable类有两个主要的子类&#xff1a;Error 和 Exception。 Error类表示…

DataGear 5.3.0 制作支持导出表格数据的数据可视化看板

DataGear 内置表格图表底层采用的是DataTable表格组件&#xff0c;默认并未引入导出数据的JS支持库&#xff0c;如果有导出表格数据需求&#xff0c;则可以在看板中引入导出相关JS支持库&#xff0c;制作具有导出CSV、Excel、PDF功能的表格数据看板。 在新发布的5.3.0版本中&a…

【电气设计】接地/浮地设计

在工作的过程中&#xff0c;遇到了需要测量接地阻抗的情况&#xff0c;组内讨论提到了保护接地和功能接地的相关需求。此文章用来记录这个过程的学习和感悟。 人体触电的原理&#xff1a; 可以看到我们形成了电流回路&#xff0c;导致触电。因此我们需要针对设备做一些保护设计…

【计算机操作系统】线程的概念和特点

1、什么是线程&#xff0c;为什么要引入线程&#xff1f; 还没引入进程之前&#xff0c;系统中各个程序只能串行执行。 比如&#xff1a;当我们在使用QQ与好友视频时&#xff0c;我们可以给其他好友发信息&#xff0c;发送文件...&#xff0c;我们知道进程是程序的一次执行&am…