双向冒泡算法(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 写入以逗号分隔的文本文件。文件名为数组的工作区变量名称&…

Hadoop基础:掌握大数据时代的核心技术【含面试题】

文章目录 Hadoop核心概念HDFS&#xff08;Hadoop Distributed File System&#xff09;MapReduce 安装和配置Hadoop实战代码HDFS的基本操作文件读写权限管理 面试题及答案面试题1&#xff1a;Hadoop和传统的关系型数据库有什么区别&#xff1f;面试题2&#xff1a;请解释MapRed…

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; ⭐️近…

创建基于Node的WebSocket服务

一:安装nodejs与npm apt-get install nodejs npm 但这种方法安装的版本可能偏低,影响后续的 npm install ws wscat。 按照 How to Install Node.js and npm on Ubuntu 18.04 | Linuxize里的步骤安装: 1、curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash …

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;通信双方在…

ElasticSearch 的 ConstantScoreQuery 的理解

ConstantScoreQuery的定义&#xff1a; A query that wraps another query and simply returns a constant score equal to 1 for every document that matches the query. It therefore simply strips of all scores and always returns 1. 结合DisMaxQueryBuilder可以查找所…

视频拍摄知识+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 鸟瞰 / 航…

MASA Framework系列-核心概念(2)

MASA Framework的核心概念主要围绕微服务架构的设计和实现&#xff0c;以确保系统的可扩展性、可维护性和高可用性。以下是MASA Framework的一些核心概念&#xff1a; 1. 服务划分与治理 服务划分&#xff1a;在MASA Framework中&#xff0c;业务功能被拆分成一系列独立的、松…

最大公约数和最小公倍数(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 %…

【随手记】MySQL快照读和当前读

在MySQL中&#xff0c;当前读和快照读是针对事务隔离级别的概念。事务隔离级别决定了事务在读取数据时的一致性要求和并发控制方式。 当前读(Current Read)&#xff1a;当前读获取的是数据的最新版本&#xff0c;可以读取到其他事务已经提交的更改。当前读可以保证读取到最新的…

Spark---核心概念(Spark,RDD,Spark的核心构成组件)详解

一、什么是Spark Spark就是一个集成离线计算&#xff0c;实时计算&#xff0c;SQL查询&#xff0c;机器学习&#xff0c;图计算为一体的通用的计算框架。 二、Spark特点 1、速度快 相比较于MR&#xff0c;官方说&#xff0c;基于内存计算spark要快mr100倍&#xff0c;基于磁…

【智能算法】CEC2017测试集

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

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

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