冒泡排序(附图详解)

news2024/12/24 20:31:44

目录

什么是冒泡排序?

冒泡排序的算法思想

算法图解

参考代码

运行结果

优化代码

运行结果


什么是冒泡排序?

将两个相邻的元素进行比较,如果前面的元素大(从小到大排序),就交换两个元素,重复这样往后依次操作,最终的结果是将一个数列按从大小或则从小到大的顺序排列;

冒泡排序的算法思想

1.先把第一个和第二个元素进行比较,如果大小顺序与目的顺序不同,就进行交换;

2.第一次比较后,把第二个和第三元素进行比较,如果与目的顺序不同,再进行交换;

3.重复上述操作,将这个数列遍历完一边后,最大或则最小的数(取决于你想排的顺序)就被放在了最后;        

4.像这样,每遍历完一遍,就会将一个元素放在正确位置,所以我们遍历的次数等于所需要排列的元素个数减去一(即如果我们想要将10个数排序,就需要遍历9次);

算法图解

参考代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

void Print(int arr[],int n)
{
	int i = 0;
	for (i = 0; i < n; i++)
	{
		printf("%d ",arr[i]);
	}
}
int main()
{
	int arr[] = { 2,7,1,10,8,9,6,4,3,5 };
	int len = sizeof(arr)/sizeof(arr[0]);
	int i = 0;
	int j = 0;
	for (i = 0; i < len-1; i++)
	{
		for (j = 0; j < len-i-1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j +1];         //元素的交换
				arr[j + 1] = tmp;
			}
		}
		Print(arr,len);                     //打印函数,打印排序过程
		printf("\n");
	}
	
	return 0;
}

运行结果

 代码优化

如果数列本是有序的,就不需要排序了。

优化代码

void Print(int arr[], int n)
{
	int i = 0;
	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
}
int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9 };
	int len = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	int j = 0;
	int flag = 1;                             //标记
	for (i = 0; i < len - 1; i++)
	{
		for (j = 0; j < len - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				flag = 0;                    //如果一次遍历数组中有一次交换,说明数组无序
				int tmp = arr[j];            //将flag赋值变为0;若有序则不变
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
		if (flag == 1)                       //若flag没改变,说明数组有序
		{
			break;                           //跳出循环
		}
		Print(arr, len);
		printf("\n");
	}
	Print(arr,len);

	return 0;
}

运行结果

(应为一次)

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

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

相关文章

ESP32设备驱动-ICM-20948 运动跟踪驱传感器驱动

ICM-20948 运动跟踪驱传感器驱动 文章目录 ICM-20948 运动跟踪驱传感器驱动1、ICM-20948介绍2、硬件准备3、软件准备4、驱动实现1、ICM-20948介绍 ICM-20948 是功耗非常低的 9 轴运动跟踪设备,非常适合智能手机、平板电脑、可穿戴传感器和物联网应用。 功率是现有 9 轴设备的…

02、PIC16F877的ADC模块

02、PIC16F877的ADC模块 一、ADC的一般配置步骤 二、ADC的软件滤波 三、性能提高 四、A/D器件推荐

【Java基础教程】(一)入门介绍篇 · 上:快速掌握核心概念,开启Java世界的探索之旅!这篇Java入门宝典助你翱翔~

Java基础教程之入门介绍 上 本节学习目标1️⃣ Java发展简史1.1 诞生1.2 发展1.3 分支 2️⃣ 特征3️⃣ 代码执行过程&#x1f33e; 总结 本节学习目标 清楚Java语言的发展历史以及语言主要特点&#xff1b;清楚Java代码从源文件到解释执行的大致过程&#xff1b;理解Java实现…

react—Hook(1)

1. useState——见react语法&#xff08;2&#xff09; 2. useEffect——见react语法&#xff08;2&#xff09; 3. useRef—获取页面元素 用来获取页面中的元素&#xff0c;这样就可以对这个元素进行操作。获取元素需要使用.current才能获取到页面中的具体元素。 定义&…

thinkphp6使用think-queue实现普通队列和延迟队列

Redis的延迟队列可以用于以下场景&#xff1a; 需求说明&#xff1a; 当用户申请售后&#xff0c;商家未在n小时内处理&#xff0c;系统自动进行退款。 商家拒绝后&#xff0c;用户可申请客服介入&#xff0c;客服x天内超时未处理&#xff0c;系统自动退款。 用户收到货物&…

Xray-基础详细使用

一&#xff1a;Xray介绍 Xray 是一款功能强大的安全评估工具&#xff0c;由多名经验丰富的一线安全从业者呕心打造而成&#xff0c;可支持与AWVS&#xff0c;BP等众多安全工具联合使用。 二&#xff1a;Xray简易架构&#xff1a; 说明&#xff1a;了解 Xray 的整体架构可以更…

python语法 变量、print、注释和运算符

文章目录 1. 变量1.1 变量名1.2 变量值1.3 查看变量类型 2. print2.1 常规使用2.2 格式化操作符 %2.2.1 格式化符号2.2.2 格式化操作符的辅助指令2.2.3 转义字符 2.2 .format() 3. 注释4. 算术运算符5. 逻辑运算符6. 按位操作符7. 比较运算符8. 复合赋值运算符5. 成员操作符 1.…

Spring 最全入门教程详解

目录 一、Spring Framwork简介1. Spring Framework五大功能模块2. Spring Framework特性 二、IOC容器1. IOC思想2. IOC容器在Spring中的实现3.基于xml管理Bean3.1 引入依赖3.2 创建类3.3 创建Spring的配置文件3.4 创建测试类3.5 总结 4.DI依赖注入4.1 setter注入4.2 构造器注入…

基于Java电脑配件销售系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Vue脚手架开发入门

Vue脚手架开发入门 安装脚手架及初始化项目 略过 后续使用的项目就是新搭建的一个项目 组件间的通信 父传子 查看《Vue初始化项目加载逻辑》这篇文章即可 父组件 子组件 子传父 场景&#xff1a;例如你的购物车&#xff0c;里面有很多商品&#xff0c;每个商品是一个…

PoseiSwap 治理通证POSE登录PancakeSwap,开盘涨幅超2100%

在 7 月 4 日&#xff0c;PoseiSwap 治理通证 $POSE 上线了 BNB Chain 上的头部 DEX PancakeSwap&#xff08;POSE/ZBC 交易对&#xff09;&#xff0c;在 $POSE 开盘交易的 10 分钟内&#xff0c;其最高涨幅达到了 2169.22%&#xff0c;所有的早期投资者基本都从中获得了不菲的…

测试与产品的那些撕逼大战

产品与测试&#xff0c;本该是一对好兄弟&#xff0c;一个为产品质量负责&#xff0c;一个为产品质量服务。但往往事与愿违&#xff0c;经常出现产品与测试撕逼大战。 为需求而撕逼 测试&#xff1a;需求不明确&#xff0c;测试用例写不出来&#xff01; 产品&#xff1a;你不…

合并回文子串(区间dp)

传送门 输入两个字符串A和B&#xff0c;合并成一个串C&#xff0c;属于A和B的字符在C中顺序保持不变。如"abc"和"xyz"可以被组合成"axbycz"或"abxcyz"等。 我们定义字符串的价值为其最长回文子串的长度&#xff08;回文串表示从正反两…

Dlib —— 对视频流进行人脸识别(附C++源码)

照片效果 视频效果 注意&#xff1a;Dlib检测人脸在Release版耗时与CPU有关,本人I7 10代约100ms左右&#xff0c;这里本人将人脸检测用Yolov5对人脸简单抠图训练后 使用yolov5推理检测人脸&#xff0c;之后将检测到的人脸输入给Dlib做特征&#xff0c;发现人脸特征部分耗时也较…

androidx.appcompat.widget.SearchView怎么改搜索框提交按钮

searchView.isSubmitButtonEnabled true&#xff0c;运动后如下图&#xff1a; 怎么改搜索框提交按钮&#xff0c;按下图操作&#xff1a; 或者 打开SearchView进入看&#xff0c;一样 搜索框提交按钮改好了&#xff0c;如下图&#xff1a;

SparkSQL的数据结构DataFrame构建方式(Python语言)

SparkSQL 是Spark的一个模块, 用于处理海量结构化数据&#xff0c;其提供了两个操作SparkSQL的抽象&#xff0c;分别是DataFrame和DataSet&#xff0c;spark2.0之后&#xff0c;统一了DataSet和DataFrame&#xff0c;以后只有DataSet。 以Python、R语言开发Spark&#xff0c;使…

BurpSutie拓展插件推荐-原始模块增强插件

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 Logger&#xff08;1&#xff09;工具介绍&#xff08;2&#xff09;下载地址&#xff08;3&#xff09;使用说明 02 HAE&#xff08;1&#xff09;工具介绍&#xff08;2&#xff09;下载地址&…

【C语言static关键字】

C语言static关键字 C语言之static1、什么是static&#xff1f;2、static的意义3、C/C static的属性4、static的用法4.1、static修饰局部变量例程4.2、static修饰全局变量例程4.3、static修饰函数例程 5、结束语 C语言之static 前言&#xff1a; 先简单了解下“三大区”&#x…

数据人一直做这四项工作,即使不被BI、AI取代,也躲不过35危机!

先说我的观点&#xff1a;数据分析职业不会被BI软件替代。顺便说一句&#xff0c;数据分析职业也不会被chatgpt取代。 大家首先要搞清楚&#xff1a;取代人的从来不是工具&#xff0c;而是会使用工具的人。 数据分析师工作内容 首先&#xff0c;先让我们来全面拆解一下国内数…