排序算法 - 冒泡

文章目录

  • 1. 冒泡排序
    • 1.1 简介
    • 1.2 基本步骤:
      • 1.3 示例代码(C)
      • 1.4 复杂度分析
      • 1.5 动画展示

1. 冒泡排序

1.1 简介

冒泡排序(Bubble Sort)是一种简单的排序算法,其基本思想是通过相邻元素的比较和交换,把最大的元素逐步“冒泡”到列表的末尾。该算法的名称来源于较小的元素会逐渐“浮”到列表的顶端,而较大的元素则逐渐“沉”到列表的底部,就像气泡在水中上升和下沉一样。

1.2 基本步骤:

  1. 比较相邻元素:从列表的第一个元素开始,比较相邻的两个元素。如果前一个元素比后一个元素大,则交换它们的位置。

  2. 遍历列表:重复上述过程,直到列表的末尾。这一轮操作结束后,最大的元素会被移动到列表的最后一个位置。

  3. 重复步骤:再次从列表的第一个元素开始,重复上述过程,但这次不再包括最后一个已经排好的元素。

  4. 终止条件:重复上述步骤,直到整个列表有序(即没有需要交换的元素)。

1.3 示例代码(C)

#include <stdio.h>// 冒泡排序函数
void bubbleSort(int arr[], int n) {int i, j, temp;for (i = 0; i < n-1; i++) {// 提前退出标志,如果在一轮中没有发生交换,说明数组已经有序int swapped = 0;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;swapped = 1; // 标记发生了交换}}// 如果没有发生交换,说明数组已经有序,提前退出循环if (swapped == 0) {break;}}
}// 打印数组函数
void printArray(int arr[], int size) {int i;for (i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}// 主函数
int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr)/sizeof(arr[0]);printf("排序前的数组: \n");printArray(arr, n);bubbleSort(arr, n);printf("排序后的数组: \n");printArray(arr, n);return 0;
}

1.4 复杂度分析

  • 时间复杂度

    • 最优情况(列表已经有序):O(n),因为只需遍历一次就可以确定列表已经有序。
    • 最坏情况(列表完全逆序):O(n^2),因为每一轮都需要遍历整个列表,并且需要进行n-1次比较和交换。
    • 平均情况:O(n^2)
  • 空间复杂度:O(1),因为冒泡排序是原地排序,不需要额外的存储空间。

1.5 动画展示

bubble

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

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

相关文章

前端请求后端php接口跨域 cors问题

只需要后端在网站的入口文件 一般都是 index.php 加上 这几行代码就可以了 具体的参数可以根据需要去修改 header("Access-Control-Allow-Origin: *"); header(Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS); header(Access-Control-Allow-Heade…

Django基础用法+Demo演示

Django快速上手 参考: Django快速上手 再写几个页面 编辑demo1/urls.py, 添加URL和视图函数映射 urlpatterns [path(index/, views.index),path(user/list/, views.user_list),path(user/add/, views.user_add), ]编辑app01/views.py&#xff0c;添加几个函数 from djang…

数据集标注txt文件读取小工具

最近在看遥感图像目标检测相关的yolo10&#xff0c;自己在网上下载了数据集跑模型&#xff0c;但是跑出来的结果与数据集出处的论文介绍分类有些不同&#xff0c;只出现了分类0的情况&#xff0c;怀疑是标注有问题&#xff0c;但是数据集太大&#xff0c;于是做了个小工具对标注…

docker:docker: Get https://registry-1.docker.io/v2/: net/http: request canceled

无数次的拉镜像让人崩溃&#xff1a; rootnode11:~/ragflow/docker# more rag.sh #export HTTP_PROXYhttp://192.168.207.127:7890 #export HTTPS_PROXYhttp://192.168.207.127:7890 #export NO_PROXYlocalhost,127.0.0.1,.aliyun.com docker compose -f docker-compose-gpu-C…

ubuntu-desktop-24.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法)

ubuntu-desktop-24.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法) 一、更新并安装基础软件 #切换root用户 sudo su -#更新 apt update #升级 apt upgrade#install vim apt install vim#install net-tools apt install net-tools二、安装ssh并设置…

UDP协议和TCP协议之间有什么具体区别?

UDP&#xff08;User Datagram Protocol&#xff09;和TCP&#xff08;Transmission Control Protocol&#xff09;是两种常见的网络传输协议&#xff0c;它们在数据传输中有着显著的区别和适用场景。理解它们的区别对于网络工程师、软件开发人员以及网络安全专家都是至关重要的…

使用Docker快速部署FastAPI Web应用

Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术&#xff0c;对进程进行封装隔离&#xff0c;一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行&#xff0c;镜像是容器的只读模板&#xff0c;容器是模板的一个实例。镜像是分层结…

深度学习之卷积问题

1 卷积在图像中有什么直观作用 ​ 在卷积神经网络中&#xff0c;卷积常用来提取图像的特征&#xff0c;但不同层次的卷积操作提取到的特征类型是不相同的&#xff0c;特征类型粗分如表1所示。 ​ 表1 卷积提取的特征类型 卷积层次特征类型浅层卷积边缘特征中层卷积局部特征深…

kafka面试题解答(四)

5、消费者组和分区数之间的关系是怎样的&#xff1f; 消费者组数小于等于分区数&#xff0c;消费者组内每个消费者负责消费不同分区的数据&#xff0c;一个分区只能由一个组内消费者消费。 6、kafka如何知道哪个消费者消费哪个分区&#xff1f; 生产者把数据发送给各个分区&…

C++编程:利用环形缓冲区优化 TCP 发送流程,避免 Short Write 问题

文章目录 1. 什么是 Short Write 问题&#xff1f;2. 如何解决 Short Write 问题&#xff1f;2.1 方法 1&#xff1a;将 Socket 设置为阻塞模式2.2 方法 2&#xff1a;用户态维护发送缓冲区 3. 用户态维护发送缓冲区实现3.1 核心要点3.2 代码实现3.3 测试程序 参考文档 1. 什么…

远离生成式AI大乱斗,SAS公司揭示亚太区千亿AI市场蓝图

生成式AI正在亚太区引发AI的新一轮风暴。根据市场调查公司IDC的一份最新调研&#xff0c;43%的亚太区企业将在未来12个月增加20%的AI投资&#xff0c;其中有40%的企业期待AI能够带来3倍投资回报。在亚太区&#xff0c;中国企业一马当先&#xff0c;不仅有27%的受访企业将AI用于…

Android Studio 将项目打包成apk文件

第一步&#xff1a;选择Build -> Generate Signed APK 会出现&#xff1a; 我们选择 Create new… 然后选择你要存放密钥的地方 点击ok之后&#xff0c;则选择好了文件&#xff0c;并生成了jks文件了。 点击ok之后&#xff0c; 会出现&#xff1a; 选择release&#xf…

【面试题】发起一次网络请求,当请求>=1s,立马中断

首先这是一个大厂的面试题&#xff0c;是我一个同事跟我说的&#xff0c;具体什么业务场景面试官没说&#xff0c;但我猜测可能是以下几种业务场景&#xff1a; 表单提交&#xff1a;在用户提交表单时&#xff0c;如果请求处理时间过长&#xff0c;可以中断请求并提示用户检查…

从0开始学习Linux——文件管理

往期目录&#xff1a; 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…

MySQL系列之如何在Linux只安装客户端

导览 前言Q&#xff1a;如何安装一个Linux环境下的MySQL客户端一、准备文件1. 确认Server版本2. 选择Client安装文件 二、下载并安装1. 下载1.1 寻找文件1.2 文件说明 2. 安装2.1 上传至Linux服务器2.2 执行安装 三、连接验证1. 确认远程授权2. 建立远程连接 结语精彩回放 前言…

虚幻引擎 CEO 谈元宇宙:发展、策略与布局

在当今科技领域&#xff0c;元宇宙无疑是最热门的话题之一。Epic Games 首席执行官 Tim Sweeney 对元宇宙的未来发展充满信心&#xff0c;他认为开放元宇宙将融合娱乐、游戏和科技产业&#xff0c;带来一个光明的未来。本文将深入探讨采访中的关键内容&#xff0c;分析元宇宙的…

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据&#xff0c;LabVIEW 上位机绘制演化曲线 主要介绍了 R78/G15 开发板基于 Arduino IDE 环境串口打印温湿度传感器 DHT11 和温度传感器 DS18B20 传感器的数据&#xff0c;并通过LabVIEW上位机绘制演…

quartz

理论知识&#xff1a; 堆&#xff1a;堆是一颗安全二叉树&#xff0c;是一种特殊的树结构&#xff0c;它的每一个节点值都要比父节点要么大&#xff0c;要么小 小顶堆&#xff1a;最小的值放在最上面&#xff0c;每个子节点都比父节点大 大顶堆&#xff1a;最大的值放在最上…

提取神经网络数学表达式

来自《老饼讲解神经网络》 www..bbbdata.com 当我们在matlab训练好网络后&#xff0c;可以使用神经网络工具箱的sim(net,x)函数进行预测输出。但往往想提取出它的数学表达式&#xff0c;该怎么提取呢&#xff1f; 下面以《一个简单的神经网络例子》中的模型为例&#xff0c;提取…

Vue 的生命周期函数 和 Vuex

创建一个 Vue 实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的&#xff1a; var vm new Vue({// 选项 })虽然没有完全遵循 MVVM 模型&#xff0c;但是 Vue 的设计也受到了它的启发。因此在文档中经常会使用 vm (ViewModel 的缩写) 这个变量名表示 Vue 实…