双向冒泡算法(C语言版)

void BidBubbleSort(int array[], int n)
{int low, high, flag, i;low = 0;high = n - 1;while (low < high){flag = 0;//假设为0时为有序for (i = low; i < high; i++) //正向冒泡{if (array[i] > array[i + 1]) //找到剩下中最大的{Swap(&array[i], &array[i + 1]);flag = 1; //标志, 有数据交换}}if (!flag)//若数组本身就有序时即上述代码不执行时 !flag=1(成真赋值) 即认定有序不再继续执行break;// return;high--;for (i = high; i > low; i--) //反向冒泡{if (array[i] < array[i - 1]) //找到剩下中最小的Swap(&array[i], &array[i - 1]);}low++;}
}

在这段代码中,if (!flag) break; 的含义是:

  • flag 是一个标志,用来表示在当前一轮的正向冒泡过程中是否进行了数据交换。
  • 如果在当前一轮正向冒泡中没有进行任何数据交换,那么说明数组已经是有序的了,此时就不需要再进行后续的排序了,可以直接跳出循环。
  • 因此,if (!flag) break; 的作用是在正向冒泡过程中检查是否需要继续排序,如果不需要,则直接跳出循环,结束排序过程。

因此,将if (!flag) break; 放在函数中间是为了在正向冒泡和反向冒泡之间进行判断,如果在正向冒泡中已经确定数组有序,则可以直接跳出循环,无需继续执行后续的反向冒泡过程。

  • flag 是一个标志,用来表示在当前一轮的正向冒泡过程中是否进行了数据交换。
  • 如果在当前一轮正向冒泡中没有进行任何数据交换,那么说明数组已经是有序的了,此时就不需要再进行后续的排序了,可以直接跳出循环。
  • 因此,if (!flag) break; 的作用是在正向冒泡过程中检查是否需要继续排序,如果不需要,则直接跳出循环,结束排序过程。
  • 在这个函数中,if (!flag) break; 被放在函数中间的原因是为了在正向冒泡和反向冒泡之间进行判断。这段代码的逻辑是这样的:

  • 首先进行正向冒泡,找到剩下中最大的数,将其冒泡到正确的位置。
  • 在正向冒泡过程中,如果没有进行数据交换(即flag仍然为0),说明剩下的部分已经是有序的,不需要继续排序,因此直接跳出循环。
  • 否则,进行反向冒泡,找到剩下中最小的数,将其冒泡到正确的位置。
  • 递增low,减小high,进入下一轮的冒泡。

flag 为1时,!flag 的值为0,因为取 flag 的逻辑非,所以 if (!flag) 条件不满足,此时执行的是 if (!flag) 的语句块内的代码。

所以,当在一轮排序中发生了数据交换(即 flag 被设置为1),!flag 的值为0,条件 if (!flag) 不成立,因此会继续执行后续的代码,而不是提前退出排序循环。

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

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

相关文章

ansible模块实战-部署rsync服务端

目录 1、根据部署流程所用到的命令找出模块 2.实战部署 2.1 服务部署&#xff1a;yum 安装 2.2 准备好rsync服务的配置文件 &#xff0c;并将配置文件通过copy模块分发给192.168.81.136这台受控主机 2.3 创建虚拟机用户 2.4 创建密码文件和改权限 2.5 模块对应目录&…

《QT实用小工具·二十九》托盘图标控件

1、概述 源码放在文章末尾 托盘图标控件 可设置托盘图标对应所属主窗体。 可设置托盘图标。 可设置提示信息。 自带右键菜单。 下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #ifndef TRAYICON_H #define TRAYICON_H/*** 托盘图标控件* 1. 可设置托盘图标…

基于SpringBoot+Vue的大学生心理咨询系统(源码+文档+包运行)

一.系统概述 使用旧方法对学生心理咨询评估信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在学生心理咨询评估信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次…

Unity解决:导出安卓apk 安装时报错:应用未安装:软件包似乎无效

Unity2018.4.36 导出安卓apk 安装时报错&#xff1a;应用未安装&#xff1a;软件包似乎无效 解决办法&#xff1a;因为安装到安卓12 需要添加添加过滤规则 在AS工程AndroidManifest.xml 添加过滤规则即可。 android:exported"true"

算法训练营第25天回溯(分割)

回溯算法&#xff08;分割&#xff09; 131.分割回文串 力扣题目链接(opens new window) 题目 给定一个字符串 s&#xff0c;将 s 分割成一些子串&#xff0c;使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: “aab” 输出: [ [“aa”,“b”], [“a”,“…

Matlab 将数据写入excel文件

Matlab 将数据写入excel文件 函数&#xff1a;writematrix 功能&#xff1a;将数据写入文件 语法 writematrix(A) writematrix(A,filename) writematrix(___,Name,Value) 说明 writematrix(A) 将同构数组 A 写入以逗号分隔的文本文件。文件名为数组的工作区变量名称&…

IDEA如何配置 Maven 及 Maven 安装过程(详细版)

IDEA如何配置 Maven&#xff08;详细版&#xff09; 一、安装Maven 1、下载Maven 安装包 官网&#xff1a;https://maven.apache.org/ 2、点击Download 》选择 apache-maven-3.8.6-bin.zip 3、下载后解压产生此文件夹 4、文件夹如图所示 二、环境变量配置 1、点击我的电脑-…

爬虫——如何应对具有反爬机制的网站

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

web安全学习笔记(12)

记一下第十六节课的内容。 一、jQuery Ajax 我们要先下载jQuery。 首先我们转移到template目录下&#xff0c;准备把jQuery下载到这下面。 直接wget下来就可以了。 这样我们就下载好了jQuery&#xff0c;下面我们学习如何使用。 jQuery 调用 ajax 方法 格式&#xff1a;$.…

【前端面试3+1】16 TCP与UDP的区别、如何清除浮动、哪些原因造成阻塞页面渲染、【相同的树】

一、TCP与UDP的区别 TCP&#xff08;Transmission Control Protocol&#xff09;和UDP&#xff08;User Datagram Protocol&#xff09;是两种常用的网络传输协议&#xff0c;它们有以下几点区别&#xff1a; 1、连接性&#xff1a; TCP是面向连接的协议&#xff0c;通信双方在…

视频拍摄知识+AIGC数据预处理

视角 参考链接&#xff1a;https://www.polarpro.com/blogs/polarpro/filmmaking-101-types-of-camera-shots-and-angles Low Angle Shot 低角度拍摄、horizontal Shot 平视、Dutch Angle Shot 荷兰角斜拍、High Angle Shot 高角度拍摄、Bird’s-eye / Aerial Shot 鸟瞰 / 航…

最大公约数和最小公倍数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现最大公约数函数&#xff1b; int max(int x, int y) {//初始化变量值&#xff1b;int judge 1;//运算&#xff1b;judge x %…

【智能算法】CEC2017测试集

目录 1.背景2.CEC2017测试集3.参考文献 1.背景 IEEE 国际进化计算大会&#xff08;IEEE Congress on Evolutionary Computation&#xff0c;IEEE CEC&#xff09;是进化计算领域中规模最大、影响最重要的会议之一。为了公平评估算法的优化性能&#xff0c;该会议在优化竞赛中提…

工作必备!快速了解多微信高效管理工具

在如今社交媒体和移动即时通信的时代&#xff0c;微信已成为人们工作和生活中不可或缺的一部分。而对于那些需要同时管理多个微信账号的用户来说&#xff0c;微信管理工具则是一项绝对必备的利器。 1、多微信同时登录 通过微信管理系统&#xff0c;我们可以在同一个界面内同时…

2024.4.18

思维导图 数据库 #include <myhead.h> //添加学生信息 void insert_stu(sqlite3* sq,char* errMsg) {char text[128];int ID,age,height;char name[10];scanf("%d%s%d%d",&ID,name,&age,&height);sprintf(text,"insert into Student values …

【论文速读】| 大语言模型是边缘情况模糊测试器:通过FuzzGPT测试深度学习库

本次分享论文为&#xff1a;Large Language Models are Edge-Case Fuzzers: Testing Deep Learning Libraries via FuzzGPT 基本信息 原文作者&#xff1a;Yinlin Deng, Chunqiu Steven Xia, Chenyuan Yang, Shizhuo Dylan Zhang, Shujing Yang, Lingming Zhang 作者单位&…

数学建模--蒙特卡罗法MATLAB代码保姆式解析

1.简单介绍 2.思想的实际运用 我们利用蒙特卡罗法的思想求解圆周率π的值&#xff0c;这里求得的肯定是近似值&#xff0c;我们是通过大量的模拟实验&#xff0c;利用概率求解的&#xff0c;但是这个值和我们的精确值之间还是有一定的误差的&#xff1b; 我们的思想就是在半径为…

npm怎么迁移到pnpm

下载的vue3模板用到了pnpm&#xff0c;就安装了一下 但是安装之后使用pnpm install 就发现包全被移动到ignored文件夹下面了,还报错 PS G:\Projects\gitProeject\TS_front> pnpm installWARN  Moving commitlint/config-conventional that was installed by a different …

基于springboot+vue+Mysql的论坛管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

清晰讲明 BFS实现的拓扑排序

前提&#xff1a; 图&#xff1a;就是结点和边组成的数据结构 有向无环图&#xff1a;就是每一个边都有方向&#xff0c;且无法构成一个环&#xff0c;只有没有环的图才能进行拓扑排序&#xff0c;所以拓扑排序也能用来证明该图有没有环 在有向无环图中有两个概念&#xff1…