冒泡排序

本文深入解析冒泡排序算法,通过实例详细阐述其工作原理及实现过程。了解如何通过比较相邻元素,逐步调整数组顺序,掌握冒泡排序的核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因

在面试或者平时开发工作中时不时都会用到冒泡排序,其实本人一直以来只知道却没有深刻理解,特意记录下来并解析加强理解。

原理

对一组数据,比较相邻数据的大小,将值小的数据放在前面,值大的数据放在后面
举例说明 $arr = array(6, 3, 8, 2, 9, 1);
$arr 有6个数据,按照两两比较大小如下,注意 比较轮数 和 每轮比较次数

第一轮排序
第一次比较 6和3比较 结果: 3 6 8 2 9 1
第二次比较 6和8比较 结果: 3 6 8 2 9 1
第三次比较 8和2比较 结果: 3 6 2 8 9 1
第四次比较 8和9比较 结果: 3 6 2 8 9 1
第五次比较 6和3比较 结果: 3 6 2 8 1 9

第一轮次比较结果:9已经冒泡出来了,下一轮可以不用比较;
排序第 1 轮 比较5次

第二轮排序
第一次比较 3和6比较 结果: 3 6 2 8 1 9
第二次比较 6和2比较 结果: 3 2 6 8 1 9
第三次比较 6和8比较 结果: 3 2 6 8 1 9
第四次比较 8和1比较 结果: 3 6 2 1 8 9

第二轮次比较结果:8已经冒泡出来了,下一轮可以不用比较;
排序第 2 轮 比较4次

第三轮排序
第一次比较 3和6比较 结果: 3 6 2 1 8 9
第二次比较 6和2比较 结果: 3 2 6 1 8 9
第三次比较 6和1比较 结果: 3 2 1 6 8 9

第三轮次比较结果:6已经冒泡出来了,下一轮可以不用比较;
排序第 3 轮 比较3次

第四轮排序
第一次比较 3和6比较 结果: 2 3 1 6 8 9
第二次比较 6和2比较 结果: 2 1 3 6 8 9

第四轮次比较结果:3已经冒泡出来了,下一轮可以不用比较;
排序第 4 轮 比较2次

第五轮排序
第一次比较 3和6比较 结果: 1 2 3 6 8 9

第五轮次比较结果:2已经冒泡出来了,因此最后一个数字1自动排到第一位,不用再比较了;
排序第 5 轮 比较1次

结论
对于一个长度为N的数组,我们需要排序 N-1 轮,每 i 轮 要比较 N-i 次。对此我们可以用双重循环语句,外层循环控制循环轮次,内层循环控制每轮的比较次数。

代码
$list = array(2,6,4,7,3,1,5,9,8,10);
//按照从小到大排序
function bundle_order($arr){
	$num = count($arr);
	$tmp = 0;
	if($num){
	//外层控制排序轮次
	for($i = 0; $i < $num-1; $i++){
		//内层控制每轮比较次数
		for($j = 0; $j < $num-1-$i; $j++){
		//由于数组的索引是从0开始的,为了方便,我们设置$j也从0开始,因此需要在循环最大值上也减去1
			if($list[$j] > $list[$j+1]){
				$tmp 		= $list[$j];
				$list[$j] 	= $list[$j+1];
				$list[$j+1] = $tmp;
				}
			}
		}
	}else{
		echo '空数组';
	}
}

$res = bundle_order($list);
var_dump($res);

参考链接: 向北的个人博客

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值