PHP冒泡排序(Bubble Sort)算法详解
前言
冒泡排序大概的意思是依次比较相邻的两个数,然后根据大小做出排序,直至最后两位数。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。但其实在实际过程中也可以根据自己需要反过来用,大树往前放,小数往后放。
实战
直接上代码:
<?php
/*** 冒泡排序算法示例*/// 这里以一维数组做演示
$demo_array = array(23,15,43,25,54,2,6,82,11,5,21,32,65);// 第一层for循环可以理解为从数组中键为0开始循环到最后一个
for ($i=0;$i<count($demo_array);$i++) {// 第二层将从键为$i的地方循环到数组最后for ($j=$i+1;$j<count($demo_array);$j++) {// 比较数组中相邻两个值的大小if ($demo_array[$i] > $demo_array[$j]) {$tmp = $demo_array[$i]; // 这里的tmp是临时变量$demo_array[$i] = $demo_array[$j]; // 第一次更换位置$demo_array[$j] = $tmp; // 完成位置互换}}
}// 打印结果集
echo '<pre>';
var_dump($demo_array);
echo '</pre>';
运行结果:
array(13) {[0]=>int(2)[1]=>int(5)[2]=>int(6)[3]=>int(11)[4]=>int(15)[5]=>int(21)[6]=>int(23)[7]=>int(25)[8]=>int(32)[9]=>int(43)[10]=>int(54)[11]=>int(65)[12]=>int(82)
}
从上面结果中,我们可以看出,数组中键值顺序已经被改变,排序成功。
如果说上面的算法是将数组中的键值按照值得大小从小到大进行排序,那么反之从大到小怎么操作呢?
很简单,只要修改一个比较符号就可以了,如下:
<?php
/*** 冒泡排序算法示例*/// 这里以一维数组做演示
$demo_array = array(23,15,43,25,54,2,6,82,11,5,21,32,65);// 第一层for循环可以理解为从数组中键为0开始循环到最后一个
for ($i=0;$i<count($demo_array);$i++) {// 第二层将从键为$i的地方循环到数组最后for ($j=$i+1;$j<count($demo_array);$j++) {// 比较数组中相邻两个值的大小if ($demo_array[$i] < $demo_array[$j]) {$tmp = $demo_array[$i]; // 这里的tmp是临时变量$demo_array[$i] = $demo_array[$j]; // 第一次更换位置$demo_array[$j] = $tmp; // 完成位置互换}}
}// 打印结果集
echo '<pre>';
var_dump($demo_array);
echo '</pre>';
运行结果:
array(13) {[0]=>int(82)[1]=>int(65)[2]=>int(54)[3]=>int(43)[4]=>int(32)[5]=>int(25)[6]=>int(23)[7]=>int(21)[8]=>int(15)[9]=>int(11)[10]=>int(6)[11]=>int(5)[12]=>int(2)
}
就这样,轻松地改变了顺序。
延伸
如果仔细观察以上代码,就会发现有一个地方值得关注,就是互换变量值得地方。没错,这也是冒泡中的核心要点,这个技巧掌握了,以后同样可以用到其他地方。
这里我们就稍微聊聊这个。
原理:
现在有A、B两个变量,需求是将其值互换。
看到题目,我们首先可能会想到直接赋值,但是如果直接赋值,不论先将谁赋值给谁,其中一个必定会被覆盖,由此我们可以想出再弄出第三个变量C,暂时存储A或B中的值,这样就可以达到需求目标了。
$c = $a; // 暂存
$a = $b; // b给a
$b = $c; // 暂存的a值再给b
注:其实不需要第三个变量,也是可以达到互换A、B变量值的,可以借助substr()、str_replace()等方法,这里因为是介绍冒泡排序的,所以不过多延伸了。
总结
关于冒泡排序的就这么多,归纳起来,主要就是两点:
循环比较
交换键值
能够完成这两点,基本就OK了,当然,关于冒泡排序的算法还有很多,这里只是其中一种,有兴趣的同学可以自己研究下。
PHP冒泡排序(Bubble Sort)算法详解相关推荐
- 排序算法——冒泡排序(Bubble Sort)
排序算法--冒泡排序(Bubble Sort) 算法简介(Introduction) Bubble sort is to compare adjacent elements of the list a ...
- php编写冒泡排序算法_PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
本文实例讲述了PHP排序算法之冒泡排序(Bubble Sort)实现方法.分享给大家供大家参考,具体如下: 基本思想: 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换 ...
- 排序算法,最全的10大排序算法详解(Sort Algorithm)
文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...
- 十大经典排序算法-冒泡排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)
冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...
- 经典排序算法 - 冒泡排序Bubble sort
经典排序算法 - 冒泡排序Bubble sort 其原理是比较接近的数字22,按照从小到交换大或降序排列, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头開始进行两两比較交换,直到倒 ...
- 7.使用php描述冒泡排序,PHP 数据结构 算法描述 冒泡排序 bubble sort
PHP 数据结构 算法描述 冒泡排序 bubble sort 复制代码 代码如下: /** * 冒泡排序 bubble sort * * 原理:多次循环进行比较,每次比较时将最大数移动到最上面.每次循 ...
- js排序算法详解-冒泡排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-冒泡排序 1.1 原始人冒泡排序 function bubbleSort(arr) {var len = ar ...
- Java中的经典算法之冒泡排序(Bubble Sort)
Java中的经典算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2 ...
- JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)
JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...
最新文章
- Zend Studio 10正式版破解(2013-02-26更新)
- 调整viewState的位置
- Spring Boot 打的包为什么能直接运行?
- C++标准程序库读书笔记-第二章新的语言特性
- gff3转mysql_GBrowse的安装和使用
- SpringBoot如何实现自动配置
- 如何更新计算机的flash player,如何在win7电脑中Adobe Flash Player自动更新?
- 学校计算机房使用登记制度,瑶风中学计算机房管理制度
- 我奋斗了18年才和你坐在一起喝咖啡
- Android集成阿里热修复(Hotfix)
- 实例教学!12种透明背景的万能设计方法
- linux下的lib文件
- 部署CITA和区块链浏览器以及智能合约
- python数据抓取工具_【重磅开源】Hawk-数据抓取工具:简明教程
- 05.概念数据模型CDM
- 如何将Nginx的版本号隐藏
- 数字IC设计 - 使用VCS逻辑仿真工具
- grpc-gateway 返回值中默认值为什么不显示?
- CSS中em的正确打开方式
- assert 能提高编程效率?你确定?