当前位置: 首页 > news >正文

C语言------冒泡法排序

一.前情提要

1.介绍

冒泡法排序法:

1)冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的列表,一次比较相邻的两个元素,并且如果它们的顺序错误就将它们交换过来。重复这个过程直到没有需要交换的元素,即可完成排序。

2)这个算法的名字来自于在排序过程中较大的元素会经由交换“冒泡”到数列的顶端,而较小的元素则会慢慢“沉”到数列的底端。

3)下面是冒泡排序的基本步骤

①比较相邻的两个元素。如果第一个比第二个大(升序排序),则交换它们。

②对每一对相邻元素重复上述步骤,直到没有任何一对元素需要比较。

③重复步骤1和2,直到整个列表都已经排好序。

4)示例图(借鉴了C语言——冒泡排序_冒泡排序c语言-CSDN博客)-----> 如有侵权联系作者删除

二.具体代码

#include <stdio.h>

// 定义冒泡排序函数

void bubbleSort(int arr[], int n) {

    int i, j, temp;

    for (i = 0; i < n - 1; i++) {

        for (j = 0; j < n - i - 1; j++) {

            // 如果当前元素大于后面的元素,则交换它们

            if (arr[j] > arr[j + 1]) {

                temp = arr[j];

                arr[j] = arr[j + 1];

                arr[j + 1] = temp;

            }

        }

    }

}

int main() {

    int arr[] = {64, 34, 25, 12, 22, 11, 90};

    int n = sizeof(arr) / sizeof(arr[0]);

    int i;

    printf("原始数组: \n");

    for (i = 0; i < n; i++) {

        printf("%d ", arr[i]);

    }

    printf("\n");

    bubbleSort(arr, n);

    printf("排序后的数组: \n");

    for (i = 0; i < n; i++) {

        printf("%d ", arr[i]);

    }

    printf("\n");

    return 0;

}

三.代码解析

1.流程:冒泡排序是一种简单的排序算法,bubbleSort()中通过多次遍历数组,比较相邻元素的大小并交换它们,从而将最大的元素逐步“冒泡”到数组的末尾。这个函数接受一个整型数组 arr 和数组的长度 n,并对数组进行排序。具体实现是通过两层嵌套的循环,外层循环控制每一轮的比较次数,内层循环用于比较相邻元素并进行交换。主函数 main(),它定义了一个整型数组 arr,并初始化了一些数据。然后通过 sizeof 运算符计算了数组的长度,并将其赋值给变量 n。接着,它使用 printf() 函数打印出原始数组的内容。然后调用了 bubbleSort() 函数对数组进行排序。最后,再次使用 printf() 函数打印出排序后的数组内容。

2.细节:(为什么 i < n - 1,j < n - i - 1?等)

外层循环的终止条件是 i < n - 1 ,原因是因为在每一轮遍历中,内层循环会比较相邻的两个元素,并将较大的元素向数组的末尾移动。因此,每经过一轮遍历,最大的元素就会被“冒泡”到数组的最后一个位置上。假设数组的长度为 n,在经过 n - 1 轮遍历后,数组中的最后一个元素已经是最大的元素了,不需要再进行比较和交换。因此,外层循环的终止条件是 i < n - 1,这样可以确保在最后一轮遍历时,内层循环不会执行多余的比较和交换操作,提高了算法的效率。

内层循环的终止条件是 j < n - i - 1。因为在每一轮外层循环中,内层循环需要比较相邻的元素,并将较大的元素向右移动,直到最大的元素移动到当前未排序部分的最后一个位置。当外层循环执行到第 i 次时,表示数组的后 i 个元素已经处于正确的位置,无需再参与比较和交换。因此,在内层循环中,需要避免对这些已经排好序的元素进行比较和交换。具体来说,每一轮内层循环中,都会从数组的第一个元素开始比较,直到倒数第 i + 1 个元素为止。因此,内层循环的终止条件是 j < n - i - 1,以确保不会对已经排好序的元素进行多余的比较和交换,提高算法的效率。

n = sizeof(arr) / sizeof(arr[0])的作用是计算数组 arr 的长度。在C 语言中,可以使用 sizeof 运算符来获取变量或类型所占据的字节数。在这里,sizeof(arr) 返回整个数组 arr 占据的字节数,而 sizeof(arr[0]) 返回数组中第一个元素 arr[0] 的字节数。由于数组中的每个元素都是相同类型的,因此数组中每个元素占据的字节数都相同。通过将整个数组的字节数除以一个元素的字节数,可以得到数组中元素的个数,也就是数组的长度。

temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

这段代码中,首先将数组中索引为 j 的元素的值保存到临时变量 temp 中。然后将数组中索引为 j + 1 的元素的值赋给索引为 j 的位置,实现了将后一个元素的值赋给前一个元素。最后,将临时变量 temp 中保存的值赋给索引为 j + 1 的位置,实现了将前一个元素的值赋给后一个元素,从而完成了两个元素值的交换。这段代码通常用于实现冒泡排序算法中的元素交换操作。

相关文章:

C语言------冒泡法排序

一.前情提要 1.介绍 冒泡法排序法&#xff1a; 1)冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它重复地遍历要排序的列表&#xff0c;一次比较相邻的两个元素&#xff0c;并且如果它们的顺序错误就将它们交换过来。重复这个过程直到没有需…...

C#(C Sharp)学习笔记_Enum枚举类型【十三】

什么是枚举类型 枚举类型(Enum) 是由基础整型数值类型的一组命名常量定义的值类型。枚举包含自己的值&#xff0c;但不能继承或传递继承。 语法 // enum enum_name // enum_name variable enum_name.enum_value// 定义一个枚举类型——例如&#xff1a; enum enum_name {va…...

乐知付-如何制作html文件可双击跳转到指定页面?

标题: 乐知付-如何制作html文件可双击跳转到指定页面&#xff1f; 标签: [乐知付, 乐知付加密, 密码管理] 分类: [网站,html] 为了便于买家理解使用链接进行付费获取密码&#xff1b;现开发个小工具&#xff0c;将支付链接转为浏览器可识别的文件&#xff0c;双击打开即可跳转到…...

电工技术学习笔记——直流电路及其分析方法

一、直流电路 电路的组成 1. 电压和电流的参考方向 电压&#xff08;Voltage&#xff09;&#xff1a;电压是电场力对电荷产生的作用&#xff0c;表示为电荷单位正电荷所具有的能量。在电路中&#xff0c;电压通常被定义为两点之间的电势差&#xff0c;具有方向性&#xff0c;…...

详解python中的迭代

如果给定一个list或tuple&#xff0c;我们可以通过for循环来遍历这个list或tuple&#xff0c;这种遍历我们称为迭代&#xff08;Iteration&#xff09;。 在Python中&#xff0c;迭代是通过for ... in来完成的&#xff0c;而很多语言比如C语言&#xff0c;迭代list是通过下标完…...

机器学习模型——集成算法(三)

前面我们说了bagging算法和Boosting算法 接下来我们学习Adaboost算法 Adaboost基本概念&#xff1a; AdaBoost &#xff08;Adaptive Boosting&#xff0c;自适应提升&#xff09;: 算法原理是将多个弱学习器进行合理的结合&#xff0c;使其成为一个强学习器。 Adaboost采用…...

企业微信企业主体变更认证介绍

企业微信变更主体有什么作用&#xff1f; 说一个自己亲身经历的事情&#xff0c;当时我在一家教育公司做运营&#xff0c;公司所有客户都是通过企业微信对接的。后来行业整顿&#xff0c;公司不得不注销&#xff0c;换了营业执照打算做技能培训&#xff0c;但发现注销后原来的企…...

如何降低AI功耗? —— 超低功耗的仿生硬件

一、背景 仿生硬件&#xff08;Bionic Hardware&#xff09;这一术语通常指的是受自然界的生物系统启发而设计制造的电子或机械硬件设备&#xff0c;它们在功能、结构、材料、能源效率等方面模仿生物体的特性&#xff0c;以实现更高效、智能、自适应或环境友好的性能。在人工智…...

原型模式详解

原型模式简单的理解来说,就是复制品,用一个已经做好的成品作为原型,然后通过复制它得到新的产品。就好像细胞分裂一样。用Java来说,就是用对象创建对象,而不是通过类来创建对象。 原型模式的目的是从原型实例克隆出新的实例 ,对于那些有非常复杂的初始化过程的对象或者是…...

嵌入式开发中状态模式实现

文章目录 状态模式代码实现代码解释小结 状态模式 状态模式&#xff08;State Pattern&#xff09;是一种行为设计模式&#xff0c;它允许对象在内部状态改变时改变它的行为。在嵌入式系统中&#xff0c;状态模式尤其适用于那些根据外部事件或内部条件频繁改变状态并且每种状态…...

目标检测——车牌数据集

一、重要性及意义 交通安全与管理&#xff1a;车牌检测和识别技术有助于交通管理部门快速、准确地获取车辆信息&#xff0c;从而更有效地进行交通监控和执法。例如&#xff0c;在违规停车、超速行驶等交通违法行为中&#xff0c;该技术可以帮助交警迅速锁定违规车辆&#xff0…...

FOC算法中为啥用PWM触发ADC中断

在FOC&#xff08;Field Oriented Control&#xff0c;场向量控制&#xff09;算法中&#xff0c;为什么要使用PWM&#xff08;Pulse Width Modulation&#xff0c;脉宽调制&#xff09;触发ADC&#xff08;Analog-to-Digital Converter&#xff0c;模数转换器&#xff09;中断…...

2024.4.5学习记录————嵌入式学习内容

2024.4.5学习记录————嵌入式学习内容 C语言 指针&#xff0c;位操作&#xff0c;结构体字节对齐&#xff0c;位段&#xff0c;宏的高级运用 C 基础特性&#xff1a;类&#xff0c;对象&#xff0c;派生&#xff0c;继承&#xff0c;运算符重载&#xff0c;友元&#xf…...

k8s 部署 canal 集群,RocketMQ 模式

k8s 部署 canal 集群&#xff0c;RocketMQ 模式 k8s 部署 canal 集群&#xff0c;RocketMQ 模式前提MySQLRocketMQ制作 canal-admin、canal-server 镜像 部署 zookeeper部署 canal-admin部署 canal-server测试 k8s 部署 canal 集群&#xff0c;RocketMQ 模式 前提 MySQL 开启…...

Android+OnnxRuntime+Opencv+Onnx模型操作图片擦除多余内容

今年来AI的发展非常迅速,在工业、医疗等等行业逐渐出现相应的解决方案,AI也逐渐成为各行业基础设施建设重要的一环,未来发展的大趋势,不过这也需要一个漫长的过程,需要很多技术型人才加入其中,除了工业设施的基础建设,在娱乐方向也有很多有趣的能力,不如图片/视频换背景…...

【CANoe】CAPL_E2E测试-验证报文中的CRC值是否正确

文章目录 一、背景二、CRC校验算法实现_dll制作三、CAPL脚本编写四、测试结果4.1、Write输出窗口4.2、测试报告截图一、背景 在嵌入式软件开发过程中,对于一些报文,需要实现安全发送与安全接收,这就涉及到CRC和RollingCounter。整车和MCU通讯的报文需要对方进行校验才能正确…...

Linux云计算之网络基础8——IPV6和常用网络服务

目录 一、IPV6基础 IPV6详解 IPv6数据报的基本首部 IPv6数据报的扩展首部 IPv6地址的表示方法 IPv6地址分类 网际控制报文协议ICMPv6 二、cisco基于IPV6的配置 cisco基于IPV6的配置步骤 模拟配置 三、HTML基础介绍 文档的结构 动手操作一下 四、常用网络服务介绍…...

页面刚加载的时候显示自己定义的{{***}}然后一闪而过

这时候别用插值表达式语法了&#xff0c;直接用v-text或者v-html就能解决这个问题 但是有个问题&#xff0c;如下图所示&#xff1a; 具体bind使用方式&#xff0c;如下图所示&#xff1a; 但是v-bind也可以进行简写&#xff0c;就是去掉v-bind&#xff0c;直接写&#xff1a…...

python批量转化pdf图片为jpg图片

1.把pdf图片批量转为jpg&#xff1b;需要注意的是&#xff0c;需要先安装poppler这个软件&#xff0c;具体安装教程放在下面代码中了 2.代码 #poppler安装教程参考&#xff1a;https://blog.csdn.net/wy01415/article/details/110257130 #windows上poppler下载链接&#xff1a…...

玫瑰图和雷达图(自备)

目录 玫瑰图 数据格式 绘图基础 绘图升级&#xff08;文本调整&#xff09; 玫瑰图 下载数据data/2020/2020-11-24 mirrors_rfordatascience/tidytuesday - 码云 - 开源中国 (gitee.com) R语言绘图—南丁格尔玫瑰图 - 知乎 (zhihu.com) 数据格式 rm(list ls()) libr…...

改进灰狼算法天线优化设计【附代码】

✨ 长期致力于灰狼优化算法、直线阵列天线、平面阵列天线、微带天线研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;Logistic-Tent双重混沌初始化与非…...

MySQL 安装后安全加固实操:从空密码警告到配置安全远程访问(Ubuntu 18.04 + MySQL 5.7)

MySQL 安全加固实战&#xff1a;从空密码警告到生产级配置 在Ubuntu服务器上部署MySQL数据库时&#xff0c;许多开发者会惊讶地发现安装后竟然可以直接用mysql -uroot无密码登录。这种默认配置在生产环境中无异于敞开大门邀请不速之客。本文将带你完成从基础安装到生产级安全配…...

Loop:三步快速配置,让你的Mac窗口管理效率提升300%

Loop&#xff1a;三步快速配置&#xff0c;让你的Mac窗口管理效率提升300% 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否经常在多个应用窗口间来回切换&#xff0c;感觉自己像个杂技演员&#…...

终极免费图片去重神器:AntiDupl.NET 完全指南,快速清理重复图片释放硬盘空间

终极免费图片去重神器&#xff1a;AntiDupl.NET 完全指南&#xff0c;快速清理重复图片释放硬盘空间 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾因电脑中堆…...

2026年IEEE TASE,基于不平衡与平衡竞争策略辅助的双种群优化算法+约束多目标优化,深度解析+性能实测

目录1.摘要2.CMOPs3.提出方法4.结果展示5.参考文献6.代码获取7.算法辅导应用定制读者交流1.摘要 针对具有复杂碎片化可行域约束多目标优化难题&#xff0c;本文提出一种基于不平衡与平衡竞争策略辅助的双种群算法&#xff08;UBCSO&#xff09;&#xff0c;通过平衡种群的均匀…...

Coze平台智能物资匹配系统——完整设计与实现指南

Coze平台智能物资匹配系统——完整设计与实现指南 文档概述 本文档提供一套完整的技术解决方案,用于在Coze(扣子)平台上搭建智能物资匹配系统。该系统以“残值+运费最小化”为核心优化目标,支持用户输入地点和物资需求或上传表格文件,自动匹配最佳物资并输出等多组备选方…...

智能语音转文字终极指南:如何用AsrTools轻松完成音频转字幕

智能语音转文字终极指南&#xff1a;如何用AsrTools轻松完成音频转字幕 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accu…...

从单片机寄存器到多线程标志:volatile关键字的5个硬核使用场景详解

从单片机寄存器到多线程标志&#xff1a;volatile关键字的5个硬核使用场景详解 在嵌入式系统和并发编程的世界里&#xff0c;volatile关键字就像一位沉默的守护者&#xff0c;确保编译器不会自作聪明地优化掉那些看似冗余但实际上至关重要的代码。对于习惯了高层抽象语言的开发…...

在Windows上运行iOS应用:ipasim模拟器完整指南与最佳实践

在Windows上运行iOS应用&#xff1a;ipasim模拟器完整指南与最佳实践 【免费下载链接】ipasim iOS emulator for Windows 项目地址: https://gitcode.com/gh_mirrors/ip/ipasim 想在Windows电脑上体验iPhone应用吗&#xff1f;厌倦了为iOS开发而购买昂贵的苹果设备&…...

Linux上运行Cursor编辑器:AppImage打包与AI编程环境搭建指南

1. 项目概述&#xff1a;一个为Linux用户定制的代码编辑器如果你是一名长期在Linux环境下工作的开发者&#xff0c;尤其是习惯了使用VS Code这类现代编辑器&#xff0c;但又对某些AI辅助编程工具&#xff08;比如Cursor&#xff09;的便捷性念念不忘&#xff0c;那么你很可能已…...