【冒泡排序及其优化】
冒泡排序及其优化
冒泡排序核心思想
冒泡排序的核⼼思想就是:两两相邻的元素进⾏⽐较
1题目举例
给出一个倒序数组:arr[10]={9,8,7,6,5,4,3,2,1,0}
请排序按小到大输出
1.1题目分析
这是一个完全倒序的数组,所以确定冒泡排序的趟数,就是需要九趟冒泡排序
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 - 1 - i; j++)//确定交换的对数{if (*(arr + j) > *(arr + j + 1)){//交换int temp = *(arr + j);*(arr + j) = *(arr + j + 1);*(arr + j + 1) = temp;}}}
}
1.3打印数组函数实现
//打印数组函数
void print(int* arr, int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", *(arr++));}
}
1.4完整代码实际代入实现
#include<stdio.h>
//冒泡排序
//冒泡排序函数
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 - 1 - i; j++)//确定交换的对数{if (*(arr + j) > *(arr + j + 1)){//交换int temp = *(arr + j);*(arr + j) = *(arr + j + 1);*(arr + j + 1) = temp;}}}
}
//打印数组函数
void print(int* arr, int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", *(arr++));}
}
int main()
{int arr[] = { 9,8,7,6,5,4,3,2,1,0 };int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz);print(arr, sz);return 0;
}
1.5运行结果展示

2.题目举例
假设给出一个极端数组arr[10]={9,0,1,2,3,4,5,6,7,8}
给他排序,按小到大输出
2.1题目分析
我们观察题目就会发现,这个数组只需1趟冒泡排序就会完成排序要求,但是,如果我们依旧使用上面那个冒泡排序的代码,他就会任然在一趟排好的情况下,继续两两比较,这样,就会大大浪费时间,所以我们就可以对以上冒泡排序代码进行优化。
2.2冒泡排序函数优化实现
//冒泡排序函数优化
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 - 1 - i; j++)//确定交换的对数{if (*(arr + j) > *(arr + j + 1)){//交换int temp = *(arr + j);*(arr + j) = *(arr + j + 1);*(arr + j + 1) = temp;flag = 0;//不是有序}}if (flag == 1)//如果已经有序,就跳出循环{break;}}
}
2.3打印数组函数实现
//打印数组函数
void print(int* arr, int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", *(arr++));}
}
2.4完整代码优化实际代入实现
//冒泡排序优化
//冒泡排序函数优化
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 - 1 - i; j++)//确定交换的对数{if (*(arr + j) > *(arr + j + 1)){//交换int temp = *(arr + j);*(arr + j) = *(arr + j + 1);*(arr + j + 1) = temp;flag = 0;//不是有序}}if (flag == 1)//如果已经有序,就跳出循环{break;}}
}
//打印数组函数
void print(int* arr, int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", *(arr++));}
}
int main()
{int arr[] = { 9,0,1,2,3,4,5,6,7,8 };int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz);print(arr, sz);return 0;
}
2.5运行结果展示

相关文章:
【冒泡排序及其优化】
冒泡排序及其优化 冒泡排序核心思想 冒泡排序的核⼼思想就是:两两相邻的元素进⾏⽐较 1题目举例 给出一个倒序数组:arr[10]{9,8,7,6,5,4,3,2,1,0} 请排序按小到大输出 1.1题目分析 这是一个完全倒序的数组,所以确定冒泡排序的趟数࿰…...
TypeScript 泛型的深入解析与基本使用
系列文章目录 文章目录 系列文章目录前言一、泛型的概念二、泛型函数三、泛型类四、泛型接口五、泛型约束总结 前言 泛型是TypeScript中的一个重要概念,它允许我们在定义函数、类或接口时使用参数化类型,增强了代码的灵活性和重用性。本文将深入探讨泛型…...
【Terraform学习】保护敏感变量(Terraform配置语言学习)
实验步骤 创建 EC2 IAM 角色 导航到IAM 在左侧菜单中,单击角色 。单击创建角色该按钮以创建新的 IAM 角色。 在创建角色部分,为角色选择可信实体类型: AWS 服务 使用案例:EC2 单击下一步 添加权限:现在,您可以看到…...
海国图志#1:这一周难忘瞬间,吐血整理,不得不看
这里记录每周值得分享的新闻大图,周日发布。 文章以高清大图呈现,解说以汉语为主,英语为辅,英语句子均来自NYTimes、WSJ、The Guardian等权威媒体原刊。 存档时段:20230731-20230806 乌克兰,波罗当卡 一名妇…...
【Android】okhttp爆java.lang.IllegalStateException: closed的解决方法
解决 java.lang.IllegalStateException: closed异常通常是由于OkHttp中的Response对象在调用response.body().string()后被关闭而导致的。 在代码中,在onResponse()方法中如果两次调用了response.body().string(),每次调用都会消耗掉响应体并关闭Respo…...
Django之定时任务--apscheduler
Django--定时任务apscheduler的使用 apscheduler定时任务的使用1、安装包2、配置settings.py3、在manage.py的文件同级目录下创建文件scheduler.py4、在项目的urls.py中调用这个定时计划5、然后启动项目 python manage.py runserver,在admin中查看就能看到你的定时任务及执行的…...
Spring Boot 项目应用消息服务器RabbitMQ(简单介绍)
一、背景 本章讲述的是在用户下单环节,消息服务器RabbitMQ 的应用 1.1 消息服务器的应用 在写一个电商项目的小demo,在电商项目中,消息服务器的应用: 1、订单状态通知:当用户下单、支付成功、订单发货、订单完成等…...
HBuilderX
HX 简介下载安装 简介 HBuilderX 是一款由 DCloud 开发的集成开发环境 (IDE),主要用于前端开发和移动应用开发。它基于 Visual Studio Code 平台,针对 Web 开发、小程序开发、移动端开发等提供了丰富的功能和插件。 DCloud官网: https://www.dcloud.io …...
C数据结构与算法——常见排序算法时间复杂度比较 应用
实验任务 (1) 掌握常见比较排序算法的实现; (2) 掌握常用比较排序算法的性能及其适用场合。 实验内容 (1) 平均时间复杂度O(n2)和O(nlog2n)的算法至少各选两种实现; (2) 待排序的无重复关键字存放在一维整型数组中,数量为60000个ÿ…...
C++并发多线程--死锁问题及解决方法
1--死锁问题 死锁问题:两个线程访问资源时加锁,但都需要对方的资源才能执行释放锁; 代码实例:下面的代码中,当线程 1 使用 my_mutex1 上锁后,会继续使用 my_mutex2 进行上锁,若此时线程 2 已经使…...
【Spring】纯注解开发
1、简介 在Spring3.0升级了纯注解开发模式,使用Java类来代替配置文件,开启了Spring快速开发赛道。 2、定义bean Component Service Controller Repository 3、纯注解开发 使用Configuration声明一个配置类,使用ComponentScan来扫描作为bea…...
【算法心得】正确估计dfs时间复杂度;剪枝优化不怕重构
https://leetcode.cn/problems/verbal-arithmetic-puzzle/ 这题看到题,“表达式中使用的不同字符数最大为 10”,就觉得dfs就完事了,最多不过10!,10!才1e6,1e7这样。如果字符再少点,6! 7! 8!的,…...
通过网关访问微服务,一次正常,一次不正常 (nacos配置的永久实例却未启动导致)
微服务直接访问没问题,通过网关访问,就一次正常访问,一次401错误,交替正常和出错 负载均衡试了 路由配置检查了 最后发现nacos下竟然有2个order服务实例,我明明只开启了一个呀 原来之前的8080端口微服务还残留&…...
div输入框的文字超过指定行数用省略号表示css
实现效果:超过四行用省略号表示 实现方法: .text{overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 4; // 自定义行数-webkit-box-orient: vertical; }...
STM32 F103C8T6学习笔记5:定时器输出不同占空比PWM驱动舵机旋转角度
现在学习使用STM32 F103C8T6的定时器PWM模式,使用PWM驱动舵机转动不同角度,文章提供源码,测试工程,测试动态效果图。 目录 基础原理: 实验目标: 测试视频结果: 测试工程下载: 基…...
液体神经网络:LNN是个啥概念?
一、说明 在在人工智能领域,神经网络已被证明是解决复杂问题的非常强大的工具。多年来,研究人员不断寻求创新方法来提高其性能并扩展其能力。其中一种方法是液体神经网络(LNN)的概念,这是一个利用动态计算功能的迷人框…...
开源数据库Mysql_DBA运维实战 (DCL/日志)
SQL(Structured Query Language 即结构化查询语言) a.DDL语句 数据库定义语言: 数据库,表,视图,索引,存储过程,函数,创建删除ALTER(CREATE DROP ALTER) b.DML语句 数…...
神经网络基础-神经网络补充概念-03-逻辑回归损失函数
概念 逻辑回归使用的损失函数通常是"对数损失"(也称为"交叉熵损失")或"逻辑损失"。这些损失函数在训练过程中用于衡量模型预测与实际标签之间的差异,从而帮助模型逐步调整权重参数,以更好地拟合数…...
基于深度信念神经网络的矿石产量预测,基于DBN的矿石产量预测,DBN的详细原理
目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) DBN的矿石产量预测 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算法,本文将DBN算法进行矿石产量预测 DB…...
JavaWeb-Filter过滤器
目录 Filter过滤器 1. Filter的生命周期 2.Filter的配置 3.拦截路径 4.拦截具体的使用 5.拦截方式配置(资源被访问方式) 6.FilterChain拦截链 Filter过滤器 filter是过滤器,相比于Servlet的发送请求,filter是用于拦截请求。…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
