C语言经典算法之冒泡排序算法

目录

前言

建议:

简介:

一、代码实现

二、时空复杂度

时间复杂度:

空间复杂度:

总结:


前言

建议:

1.学习算法最重要的是理解算法的每一步,而不是记住算法。

2.建议读者学习算法的时候,自己手动一步一步地运行算法。

简介:

冒泡排序是一种简单但效率较低的排序算法,它通过多次遍历待排序的元素,比较相邻元素的大小并交换,将较大的元素逐步移动到数组的末尾。

 

一、代码实现

#include <stdio.h>// 冒泡排序函数
void bubbleSort(int arr[], int n) {// 外层循环控制需要比较的轮数for (int i = 0; i < n - 1; i++) {// 内层循环逐一比较并交换相邻元素,确保每轮将一个较大元素移至末尾for (int j = 0; j < n - i - 1; j++) {// 如果相邻元素顺序错误,则交换它们if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}// 打印数组元素
void printArray(int arr[], int size) {// 遍历数组并打印每个元素for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}int main() {int arr[] = {64, 25, 12, 22, 11};int n = sizeof(arr) / sizeof(arr[0]);printf("原始数组:\n");printArray(arr, n);// 调用冒泡排序函数bubbleSort(arr, n);printf("排序后的数组:\n");printArray(arr, n);return 0;
}

这个简单的C程序首先定义了一个bubbleSort函数,该函数接受一个整数数组和数组的大小作为参数,并对数组进行冒泡排序。然后,通过printArray函数打印原始数组和排序后的数组。在main函数中,我们声明一个整数数组,调用bubbleSort函数进行排序,然后再次调用printArray函数以展示排序结果。

二、时空复杂度

时间复杂度:

最好情况O(1)
当待排序数组已经是有序的情况下,冒泡排序只需进行一次遍历,每次比较都不需要交换,时间复杂度为线性级别。
最坏情况
当待排序数组是逆序的情况下,每一轮都需要进行n次比较和交换,共需要n-1轮,因此时间复杂度为O(n^2)
平均情况
在平均情况下,冒泡排序的时间复杂度也为O(n^2),因为它总是进行n-1轮遍历,每轮都要比较和可能的交换。


空间复杂度:

冒泡排序是一种原地排序算法,不需要额外的空间,因此空间复杂度为O(1)。

三、总结:

冒泡排序的主要思想是通过多次遍历数组,每次比较相邻元素并交换它们,将较大的元素逐步移动到数组的末尾。这个过程重复进行,直到整个数组有序。尽管冒泡排序实现简单,但对于大型数据集来说,效率较低,因此在实际应用中可能不太常见,但是是考研的重点

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

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

相关文章

CNN:Convolutional Neural Network(下)

目录 1 CNN 学到的是什么 1.1 Convolution 中的参数 1.2 FFN 中的参数 1.3 Output 2 Deep Dream 3 Deep Style 4 More Application 4.1 AlphaGo 4.2 Speech 4.3 Text 原视频&#xff1a;李宏毅 2020&#xff1a;Convolutional Neural Network 本博客属于学…

计算机毕业设计----SSH实现简单在线听音乐收藏管理系统

项目介绍 项目分为管理员与普通用户两种角色&#xff0c; 管理员角色包含以下功能&#xff1a; 管理员登录,用户管理,歌曲管理等功能。 用户角色包含以下功能&#xff1a; 按分类查看,添加歌单,用户登录等功能。 环境需要 1.运行环境&#xff1a;最好是java jdk 1.8&…

shell从入门到精通

系列文章目录 shell从入门到精通 shell从入门到精通 系列文章目录一、diff 用法 &#xff08;一般作补丁,用补丁的方式更新脚本&#xff09;1.1参数a添加1.2 参数c更改1.3参数d删除1.4参数a和d的对比1.5参数b&#xff08;忽略空格&#xff09;1.6 参数B&#xff08;忽略空行&a…

打造创新的金融数据平台,加速数字化和智能化转型丨PingCAP 官网金融行业专区上线

自诞生以来&#xff0c;TiDB 的原生分布式架构在强一致性、高可用性和可扩展性等方面与金融级业务需求高度契合&#xff0c;早期版本即为包括北京银行在内的金融用户提供服务。 TiDB 的核心能力始终源自与中国金融用户的共同创造。作为金融级分布式数据库&#xff0c;TiDB 在国…

【pytorch】使用pytorch构建线性回归模型-了解计算图和自动梯度

使用pytorch构建线性回归模型 线性方程的一般形式 衡量线性损失的一般形式-均方误差 pytorch中计算图的作用和优势 在 PyTorch 中&#xff0c;计算图&#xff08;Computational Graph&#xff09;是一种用于表示神经网络运算的数据结构。每个节点代表一个操作&#xff0c;例如…

药物“出气”可知|ZL-005大小鼠雾化给药仪

雾化吸入给药是一种通过装置使药物进入肺部局部或全身发挥作用的给药方式。相较于口服药剂&#xff0c;雾化吸入给药可避免首过效应和药剂破坏&#xff0c;提高药物生物利用度。 而ZL-005大小鼠雾化给药仪&#xff0c;则是新一代小动物雾化装置的理想选择&#xff0c;可完成动…

JavaWeb之Redis

31、Redis 31.1、Redis概述 概念&#xff1a;redis是一款高性能的NOSQL系列的非关系性数据库 什么是NOSQL NoSQL(NoSQL Not Only SQL)&#xff0c;意即“不仅仅是SQL”&#xff0c;是一项全新的数据库理念&#xff0c;泛指非关系型的数据库。 随着互联网web2.0网站的兴起&a…

MIT_线性代数笔记:第 26 讲 复矩阵;快速傅里叶变换

目录 复向量 Complex vectors复矩阵 Complex matrices傅里叶变换 Fourier transform快速傅里叶变换 Fast Fourier transform 实矩阵也可能有复特征值&#xff0c;因此无法避免在矩阵运算中碰到复数&#xff0c;本讲学习处理复数矩阵和复向量。 最重要的复矩阵是傅里叶矩阵&…

电力能源监测管理系统,在医院中有哪些作用?

随着经济全球化的发展&#xff0c;节能减排成为当前社会发展必须关注的问题。电力能源监测管理系统&#xff0c;可以分析电力管理能源的现状&#xff0c;并根据现状提出对应的策略&#xff0c;为快速高效建成绿色智能化医院提供有力支撑和技术保障。 医院能源管理现状 1、人力…

Java零基础教学文档第四篇:HTML_CSS_JavaScript(2)

【HTML】 【主要内容】WEB: 1&#xff0e;Web前端简介 2&#xff0e;创建第一个前端项目 3&#xff0e;相关标签详解 4&#xff0e;表格标签详解 5&#xff0e;表单标签详解 6&#xff0e;框架和实体字符 【学习目标】 1. Web前端简介 1.1 为什么要学习Web前端&#…

Windows10 Docker Desktop安装

一、简介 Docker Desktop是Docker公司推出的一款桌面应用程序&#xff0c;它提供了一个用户友好的界面&#xff0c;方便开发人员在本地环境中使用容器技术。 容器是一种轻量级的虚拟化技术&#xff0c;可以将应用程序和其依赖项打包在一起&#xff0c;形成一个独立、可移植的…

Linux学习之网络编程1(纯理论)

写在前面 刚刚更新完Linux系统编程&#xff0c;特别推荐大家去看的Linux系统编程&#xff0c;总共44个小时&#xff0c;老师讲的非常好&#xff0c;我是十天肝完的&#xff0c;每天大概看20集&#xff0c;每天还要以写blog的形式来写笔记来总结一下&#xff0c;虽然这十天有点…

适用于Mac电脑的 iOS 设备管理器选 iTunes 还是iMazing?

mac上有没有好用的ios设备管理器&#xff1f; 因为工作的关系&#xff0c;一共使用3部苹果手机&#xff0c;资料很杂很多也很乱&#xff0c;想整理也不知道从何下手&#xff0c;有人推荐【iTunes】&#xff0c;有人推荐【iMazing】&#xff0c;该如何选择呢&#xff1f; 一、i…

架构师 - 架构师是做什么的 - 学习总结

架构师核心定义 架构师是什么 架构师是业务和技术之间的桥梁 架构师的核心职责是消除不确定性、和降低复杂性 架构设计环 架构师的三个核心能力 架构师的三个关键思维 架构师主要职责 架构设计 Vs 方案设计 架构设计前期 主要任务 澄清不确定性 明确利益干系人的诉求消除冲…

2024.1.13力扣每日一题——构造限制重复的字符串

2024.1.13 题目来源我的题解方法一 计数模拟 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2182 我的题解 方法一 计数模拟 因为字符串s由小写字母构成&#xff0c;因此使用一个int[26]的数组保存每个字符的数量&#xff0c;然后从最大的字符开始构造结果字符串sb&…

段码液晶显示屏模块 背光控制的坑

玩的这个模块做测试&#xff0c;它的引脚有以下的介绍&#xff0c;商家提供了些资料&#xff0c;但没原理图。 led引脚想当然的接个IO输出口&#xff0c;但怎么输出0或1都不能控制背光 然后仔细研究了上面的电路&#xff0c;才发现LED是直接连接着VCC的 总结是这个背光要控制的…

曲线生成 | 图解贝塞尔曲线生成原理(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 贝塞尔曲线的应用2 图解贝塞尔曲线3 贝塞尔曲线的性质4 算法仿真4.1 ROS C仿真4.2 Python仿真4.3 Matlab仿真 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(图搜索、采样法…

全包了 功能超级强大的linux管理平台1panel部署教程

目录 先看下效果 1.1panel是什么 2.安装教程 2.1下载安装包 2.2解压 2.3安装 3.查看 3.1初始化并登录 3.2容器管理页面&#xff0c;可以启动 重启 创建容器 ​编辑 3.3应用商店 意见安装常用应用 ​编辑 3.4可视化任务管理 3.5网站管理 3.6数据库管理 ​编辑 3…

iOS UIViewContentMode 不同效果图文对比

一. iOS提供了的ContentMode有如下几种 其中默认mode是UIViewContentModeScaleToFill typedef NS_ENUM(NSInteger, UIViewContentMode) {UIViewContentModeScaleToFill,UIViewContentModeScaleAspectFit, // contents scaled to fit with fixed aspect. remainder is tr…

Python教程44:海龟画图turtle画卡塔尔世界杯吉祥物

---------------turtle源码集合--------------- Python教程42&#xff1a;海龟画图turtle画海绵宝宝 Python教程41&#xff1a;海龟画图turtle画蜡笔小新 Python教程40&#xff1a;使用turtle画一只杰瑞 Python教程39&#xff1a;使用turtle画美国队长盾牌 Python教程38&a…