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

C语言冒泡排序

        冒泡排序是一种简单的排序算法,通过重复遍历要排序的数列,依次比较两个相邻的元素,如果它们的顺序错误则交换它们。这个过程会重复进行,直到没有相邻的元素需要交换,也就是数列已经排序完成。

        冒泡排序的名字来源于其工作方式,因为较小的元素会像气泡一样逐渐上升到数列的顶端,而较大的元素则会下沉到底部。冒泡排序的时间复杂度为O(n^2),其中n是数列的长度,因此它适用于数据规模较小的情况。然而,当数据规模较大时,冒泡排序的效率会明显下降。此外,冒泡排序是一种稳定的排序算法,因为相等元素的相对位置在排序前后不会改变。

        冒泡排序的基本思想是:每次比较相邻的两个元素,如果它们的顺序不对就交换它们,这样每一轮遍历都会把当前未排序序列中的最大(或最小)元素交换到最后(或最前),直到整个序列有序。

        假设一个序列中共有 n 个元素,那么上面的比较和交换过程一共需要进行 n-1 趟:

        第一趟需要比较序列中的所有元素,它的效果是将整个序列中最大的元素放置到了序列最后一个位置上。

        第二趟只需要比较前面 n-1 个元素,因为前一趟中已经将最大的元素移到了它最终的位置上了。这一趟结束时,整个序列中第二大的元素就被放置到了倒数第二个位置上。

        同样的,第三趟只需要比较前面 n-2 个元素。该趟结束时,序列中第三大的元素就被放到了倒数第三个位置上。

        当进行第 i 趟的时候,需要比较的是前面 n-(i-1) 个元素,因为序列中最大的 i-1 个元素已经在前面的 i-1 趟排序中被排好了。注意,比较 n-(i-1) 个元素需要进行 n-i 次比较。

        当最终到达第 n-1 趟的时候,只需要比较序列中最前面的两个数而已。该趟结束时,序列中第二小的数就被放置到了顺数第二个位置上。同时,序列中最小的数也被放到了第一个位置上。整个排序过程完成。

        从以上对算法原理的讲解中,我们首先可以知道冒泡排序是一种交换排序,它需要进行大量的交换操作。其次,因为当两个元素相等时它们不会被交换,所以相等元素的相对位置在排序前后不会改变,因此冒泡排序又是一种稳定的排序算法

        下面看图理解一下

代码解释:

#include <stdio.h>
int bubble_sort(int arr[],int n) {int i,j,temp=0;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[] = {3,1,6,2,9,0,7,4,5,8};int n = sizeof(arr) / sizeof(arr[0]);  printf("排序前的数组:\n");for (int i = 0; i < n; i++)printf("%d ", arr[i]);printf("\n");  bubble_sort(arr, n);printf("排序后的数组:\n");for (int i = 0; i < n; i++)printf("%d ", arr[i]);printf("\n");return 0;
}

结果:

排序前的数组:
3 1 6 2 9 0 7 4 5 8
排序后的数组:
0 1 2 3 4 5 6 7 8 9
请按任意键继续. . .

        在冒泡排序算法中,内层循环的循环条件需要根据当前轮次的外层循环来确定,以确保只对未排序部分进行比较和交换。

i<n−1:

        这个条件控制了外层循环的执行次数。外层循环的索引 i 从0开始,每次循环递增 1 ,直到i达到 n−1 时停止。这是因为在冒泡排序中,当进行 n−1 轮比较后,所有元素都已经排好序,无需再继续比较。

j<n−i−1:

        这个条件控制了内层循环的执行次数。内层循环的索 j 从 0 开始,每次循环递增 1 ,直到 j 达到 n−i−1 时停止。这是因为在每一轮外层循环中,已经确定了最后 i 个元素的位置,无需再对这些元素进行比较。

相关文章:

C语言冒泡排序

冒泡排序是一种简单的排序算法&#xff0c;通过重复遍历要排序的数列&#xff0c;依次比较两个相邻的元素&#xff0c;如果它们的顺序错误则交换它们。这个过程会重复进行&#xff0c;直到没有相邻的元素需要交换&#xff0c;也就是数列已经排序完成。 冒泡排序的名字来源于其工…...

vue2 elementui 封装一个动态表单复杂组件

封装一个动态表单组件在 Vue 2 和 Element UI 中需要考虑到表单字段的动态添加、删除以及验证等复杂功能。下面是一个简单的例子&#xff0c;展示如何创建一个可以动态添加和删除字段的表单组件。 首先&#xff0c;你需要安装并引入 Element UI&#xff1a; bash 复制 npm in…...

基于智慧灯杆的智慧城市解决方案(2)

功能规划 智慧照明功能 智慧路灯的基本功能仍然是道路照明, 因此对照明功能的智慧化提升是最基本的一项要求。 对道路照明管理进行智慧化提升, 实施智慧照明, 必然将成为智慧城市中道路照明发展的主要方向之一。 智慧照明是集计算机网络技术、 通信技术、 控制技术、 数据…...

「Paraverse平行云」亮相HKSTP OPENHOUSE活动

&#x1f680;11月7日&#xff0c;「Paraverse平行云」参展香港科学园HKSTP一年一度的Open House活动&#xff01; ✨ 众多专家、同行与我们驻足深入交流&#xff0c;探索实时云渲染解决方案LarkXR在在数字人、数字孪生、建筑信息模型&#xff08;BIM&#xff09;、3D建模、建筑…...

CubeMX使用教程(5)——定时器PWM输出

本篇我们将利用CubeMX产生频率固定、占空比可调的两路PWM信号输出 例如PA6引脚输出100Hz的PWM&#xff1b;PA7引脚输出500Hz的PWM&#xff0c;双路同时输出 我们还是利用上一章定时器中断的工程进行学习&#xff0c;这样比较方便 首先打开CubeMX对PA6、PA7进行GPIO配置 注&a…...

superset连接Apache Spark SQL(hive)过程中的各种报错解决

superset连接数据库官方文档&#xff1a;Installing Database Drivers | Superset 我们用的是Apache Spark SQL&#xff0c;所以首先需要安装下pyhive #命令既下载了pyhive也下载了它所依赖的其他安装包 pip install pyhive#多个命令也可下载 pip install sasl pip install th…...

Pulsar IO实战

一、引言 今天跟着 官方文档 基于docker玩一把Pulsar IO吧 二、概要 在用户能够轻松的将消息队列跟其他系统(数据库、其他消息系统)一起使用时&#xff0c;消息队列的作用才是最强大的。而Pulsar IO connectors可以让你很轻松的创建、部署以及管理这些跟外部系统的连接&#…...

Linux/Ubuntu/Debian基本命令:文本操作

Linux系统真的超级好用&#xff0c;免费&#xff0c;有很多开源且功能强大的软件。尤其是Ubuntu&#xff0c;真的可以拯救十年前的老电脑。 下面是用于在命令行界面&#xff08;Terminal&#xff09;中进行文本操作的键盘快捷键&#xff0c; 这些快捷方式对于高效的文本编辑非常…...

Self-supervised Contextual Keyword and Keyphrase Retrieval with Self-Labelling

文章目录 题目摘要方法数据集实验 题目 通过自我标记进行自我监督的上下文关键字和关键词短语检索 论文地址&#xff1a;https://www.preprints.org/manuscript/201908.0073/v1 项目地址&#xff1a;https://github.com/naister/Keyword-OpenSource-Data 摘要 在本文中&#x…...

新 树莓派4B 温湿度监测 基于debian12的树莓派OS

前言 本文旨在完成通过外接温湿度传感器至树莓派使得树莓派不断记录并存储温湿度数据 这个领域有很多文章&#xff0c;但是部分文章已经缺乏了时效性&#xff0c;在最新系统不适用&#xff0c;本文目前适用 硬件 硬件连接 温湿度传感器常选用DHT11和DHT22&#xff0c;淘宝…...

人工智能入门之旅:从基础知识到实战应用(一)

一、引言 人工智能(Artificial Intelligence,AI)是指利用计算机科学和技术模拟、延伸和扩展人类智能的理论、方法、技术和应用系统的学科。它的目标是使计算机系统具有类似于人类的智能,能够感知环境、学习、推理、规划、解决问题和交流。 在当今社会中,人工智能具有极其…...

GNN/GCN自己学习

一、图的基本组成 V&#xff1a;点&#xff08;特征&#xff09; E&#xff1a;边 U&#xff1a;图&#xff08;全局特征&#xff09; 二、用途 整合特征&#xff08;embedding)&#xff0c;做重构 三、邻接矩阵 以图像为例&#xff0c;每个像素点周围都有邻居&#xff0c;…...

honle电源维修UV电源控制器维修EVG EPS60

好乐UV电源控制器维修&#xff1b;honle控制器维修&#xff1b;UV电源维修MUC-Steuermodul 2 LΛmpen D-82166 主要维修型号&#xff1a; EVG EPS 60/120、EVG EPS 100、EVG EPS200、EVG EPS 220、EVG EPS 340、EVG EPS40C-HMI、EVG EPS60 HONLE好乐uv电源维修故障包括&#…...

【学习心得】Python好库推荐——websocket-client

websocket-client 是一个在 Python 中广泛使用的库&#xff0c;用于创建 WebSocket 客户端并实现与 WebSocket 服务器的双向通信。更多的关于websocket协议介绍&#xff0c;可以看看我之前写的文章哦&#xff01; 【学习心得】websocket协议简介并与http协议对比http://t.csdn…...

3.1_8 两级页表

文章目录 3.1_8 两级页表&#xff08;一&#xff09;单级页表存在的问题&#xff08;二&#xff09;如何解决单级页表的问题&#xff1f;&#xff08;三&#xff09;两级页表的原理、地址结构&#xff08;四&#xff09;如何实现地址变换&#xff08;五&#xff09;需要注意的几…...

【SysBench】sysbench-1.20 命令速查表

1、通用语法 The general command line syntax for sysbench is: sysbench [options]... [testname] [command] testname is an optional name of a built-in test (e.g. fileio, memory, cpu, etc.), or a name of one of the bundled Lua scripts (e.g. oltp_read_only), or…...

neo4j网页无法打开,启动一会儿后自动关闭,查看neo4j status显示Neo4j is not running.

目录 前情提要User limit of inotify watches reached无法访问此网站 前情提要 公司停电&#xff0c;服务器未能幸免&#xff0c;发现无法访问此网站&#xff0c;http://0.0.0.0:7474 在此之前都还好着 User limit of inotify watches reached (base) [rootlocalhost ~]# n…...

一键卸载和安装 nvidia、cuda、cudnn、tensorrt

1. 卸载 nvidia、cuda、cudnn、tensorrt sudo apt purge \"cuda*" \"libcudnn*" \"libnvinfer*" \"libnvonnxparsers*" \"libnvparsers*" \"tensorrt*" \"nvidia*&…...

LeetCode 389. 找不同

文章目录 一、题目二、C 题解 一、题目 给定两个字符串 s 和 t &#xff0c;它们只包含小写字母。 字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 1&#xff1a; 输入&#xff1a;s “abcd”, t “abcde” 输出&…...

科技云报道:两会热议的数据要素,如何拥抱新技术?

科技云报道原创。 今年全国两会上&#xff0c;“数字经济”再次成为的热点话题。 2024年政府工作报告提到&#xff1a;要健全数据基础制度&#xff0c;大力推动数据开发开放和流通使用&#xff1b;适度超前建设数字基础设施&#xff0c;加快形成全国一体化算力体系&#xff1…...

毫米波雷达开发者必看:双级联方案如何用DDMA波形实现300米精准测距?

毫米波雷达双级联方案实战&#xff1a;DDMA波形设计如何突破300米测距极限&#xff1f; 当特斯拉HW4.0的雷达模块在暴雨中依然稳定输出300米外的障碍物坐标时&#xff0c;背后的技术密码正是双级联架构与DDMA波形的完美融合。作为L3级自动驾驶系统的"全天候之眼"&am…...

ComfyUI-WanVideoWrapper:5个技巧快速上手14B参数AI视频生成插件

ComfyUI-WanVideoWrapper&#xff1a;5个技巧快速上手14B参数AI视频生成插件 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 在AI视频生成领域&#xff0c;ComfyUI-WanVideoWrapper作为一款强大…...

BetterNCM Installer:让网易云音乐插件管理化繁为简的插件管理工具

BetterNCM Installer&#xff1a;让网易云音乐插件管理化繁为简的插件管理工具 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾经因为安装网易云音乐插件的复杂流程而望而却步…...

LaTeX模板-主流SCI期刊模板-IEEE模板-Elsevier模板-Springer模板-Science模板-ACM模板-arXiv模板-MDPI模板

出版商模板下载链接适用领域IEEEIEEE-Template Selector电气工程、通信、计算机科学等SpringerSpringerLaTeX模板计算机、数学、生物、医学等多个领域ElsevierElsevier工程、物理、化学、医学、社会科学等ScienceScience跨学科顶刊ACMACM模板计算机科学会议与期刊MDPIMDPI模板自…...

FadCam 安卓后台视频录制应用,支持屏幕关闭录制,多画质高帧率,隐私保护,适配个人安防与事件记录等正当用途

大家好&#xff0c;我是大飞哥。在个人安防、事件记录、现场取证等场景中&#xff0c;普通安卓录屏应用大多需要保持屏幕常亮&#xff0c;不仅容易暴露录制行为&#xff0c;还会快速消耗电量&#xff0c;无法满足隐蔽、长效录制的需求&#xff0c;而部分后台录制工具又存在隐私…...

LCMV与MVDR傻傻分不清?一个约束矩阵讲透两者的区别与联系

LCMV与MVDR&#xff1a;从约束矩阵维度看波束形成算法的核心差异 在嘈杂的会议室里&#xff0c;智能音箱总能准确捕捉你的声音&#xff1b;雷达系统可以在复杂环境中锁定特定目标——这些场景背后&#xff0c;都离不开阵列信号处理中的波束形成技术。当工程师们深入算法层时&am…...

2026届必备的十大AI辅助写作助手实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能于学术写作领域的介入&#xff0c;先是在简单的语法校对、文献检索方面&#xff0c;…...

千问GEO生成式引擎优化技术方案

千问GEO生成式引擎优化技术方案 技术支持&#xff1a;拓世网络技术开发工作室 针对通义千问&#xff08;Qwen&#xff09;的生成式引擎优化&#xff08;GEO&#xff09;并非简单的关键词堆砌&#xff0c;而是一场关于“认知抢占”的技术战役。在2026年的当下&#xff0c;随着通…...

PlugY:暗黑破坏神2单机体验增强插件

PlugY&#xff1a;暗黑破坏神2单机体验增强插件 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 核心痛点&#xff1a;单机暗黑2的体验瓶颈何在&#xff1f; 暗黑破坏…...

突破Windows与Android壁垒:APK-Installer重构跨平台应用安装体验

突破Windows与Android壁垒&#xff1a;APK-Installer重构跨平台应用安装体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在数字化生活中&#xff0c;两个场景常常困…...