使用PHP实现冒泡排序
一,什么是冒泡算法
冒泡算法,是一种计算机科学领域里比较简单的排序算法。它需要重复的走访过要排序的数列,依次比较两个相邻的元素,如果顺序错误就进行交换,一直到没有相邻元素需要交换,即排序完成。
这个算法的名字由来是因为越小的元素经过交换之后,会慢慢的浮到数列的顶端,就像碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
二,冒泡算法的原理
冒泡排序算法的原理如下:
1,比较相邻的两个元素,如果第一个比第二个大,就交换他们两个;
2,对每一对相邻的元素做同样的动作,从开始的第一对到队尾的最后一对。在这一点,最后的元素应该是最大的数;
3,针对所有元素重复以上的动作,除了最后一个;
4,持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要交换;
三,排序过程
假如需要对给定的无序数组进行排序
第一轮排序
第一次排序,将指针放在队首位置,即9的位置,并与7进行比较,9比7大,所以9跟7交换位置
第二次排序,将指针往后移动,置于9的位置,并与1进行比较,9比1大,所以9跟1交换位置
第三次排序,将指针往后移动,置于9的位置,并与3进行比较,9比3大,所以9跟3交换位置
第四次排序,将指针往后移动,置于9的位置,并与2进行比较,9比2大,所以9跟2交换位置
到此,9已经处于队尾的位置,不需要再继续参与排序了,第一轮排序结束。
第二轮排序
第一次排序,将指针置于队首的位置,即7的位置,并与1进行比较,7比1大,所以7跟1交换位置
第二次排序,将指针往后移动,置于7的位置,并于3进行比较,7比3大,所以7跟3交换位置
第三次排序,将指针往后移动,置于7的位置,并于2进行比较,7比2大,所以7跟2交换位置
到此,7已经排好序,不需要再参与排序了,第二轮排序结束。
第三轮排序
第一次排序,将指针置于队首的位置,即1的位置,并与3进行比较,1比3小,所以1跟3不用交换位置
第二次排序,将指针往后移动,置于3的位置,并与2进行比较,3比2大,所以3跟2交换位置
到此,3已经排好序,不需要再参与排序了,第三轮排序结束
第四轮排序
第一次排序,将指针置于队首的位置,即1的位置,并与2进行比较,1比2小,所以1跟2不用交换位置
到此,1跟2已经排好序,排序结束。
四,PHP代码实现
function bubbleSort($array){$count = count($array);for ($i=0;$i<$count-1;$i++){for ($j=0;$j<$count-$i-1;$j++) {if($array[$j] > $array[$j+1]) {$t = $array[$j];$array[$j] = $array[$j+1];$array[$j+1] = $t;}}}return $array;
}
上面代码利用了双循环来实现排序。 外循环用来控制所有轮次,内循环用来控制每一轮的排序。那上面的代码有没有可以优化的地方呢?我们来思考一个问题,假如所有数列都是有序的,那么第一轮第一次排序之后所有数列没有发生一次交换,这时候其实已经可以不用再继续后面的循环了,这样可以减少循环的次数。
我们可以做个小小的改动,在一轮排序之后,如果没有发生任何交换,即表明整个数列有序。
改动后的代码如下:
function bubbleSort($array){$count = count($array);for ($i=0;$i<$count - 1;$i++){$isChange = false;for ($j=0;$j<$count-$i-1;$j++) {if($array[$j] > $array[$j+1]) {$t = $array[$j];$array[$j] = $array[$j+1];$array[$j+1] = $t;$isChange = true;}}if(!$isChange) {break;}}return $array;
}
使用PHP实现冒泡排序相关推荐
- PHP算法题:如何实现冒泡排序
算法原理: 1.比较相邻的元素,如果第一个比第二个大,那么就交换这两个元素. 2.对每一对相邻元素做同样的工作,从第一对开始到最后一对结束,最后的元素应该会是最大的数. 3.除了最后一个元素外,针对其 ...
- C#基础——数组(冒泡排序)
数组 所谓数组,就是相同数据类型的元素按一定的顺序的集合,就是把有限个类型相同的变量用一个名字来命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组的各个变量称为数组的分量 ...
- python实现冒泡排序完整算法_Python实现冒泡排序算法的完整实例
冒泡排序:顾名思义就是(较小的值)像泡泡一样往上冒,(大的值)往下沉. 实现原理:依次将相邻两个数值进行比较,较小的数值移到左边,较大的数值移到右边,依次比较完第一轮后,最大的数值应该排在最右边.然后 ...
- 为什么双层循环 冒泡排序_冒泡排序的双重循环理解
主要说一下冒泡排序的一些关键地方的个人理解,比如算法思想,两个循环的作用意义,中间循环变量范围的确定等. 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面 ...
- 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)
冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...
- Equalizing Two Strings 冒泡排序or树状数组
首先考虑排序后相等 如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES 不然的话就假设c为a,b排完 ...
- java冒泡排序_Java中的经典算法之冒泡排序(Bubble Sort)
原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...
- python冒泡排序与常用数学计算
一 .冒泡排序: 冒泡排序: 属于交换排序; 两两比较大小,交换位置,如同水泡大的往上(右)跑; n个数从左至右编号从0到n-1,索引0和1比较,如果索引0大,则交换两者位置; 如果索引1大则不用交换 ...
- Console-算法-冒泡排序法|倒水法
ylbtech-Arithmetic:Console-算法-冒泡排序法|倒水法 1.A,案例 -- ================================================== ...
- java 冒泡排序和快速排序 实现
面试的时候经常会遇到面试官让你直接手写排序算法,下面是冒泡排序和快速排序的实现. 冒泡排序 基本流程就是,自下而上比较相邻的两个元素进行比较,让大的元素往下面沉,较小的往上冒.按照排序规则进行比较,如 ...
最新文章
- 常用的上网 发帖技巧
- java第一节课程笔记、课后习题
- 006_Gson定制型适配器
- imx6 LCD 参数配置(lvds为例)
- 图层几何学 -- iOS Core Animation 系列二
- linux7安装EMC的多路径,Oracle Linux 7.8 多路径(Multipath)+Udev绑定磁盘
- NYOJ-疯牛(贪心)
- vue 写门户网站_你不得不知道的Vue项目技巧
- 关于加载表格及模态框数据回填的Bug
- 教你如何快速查询快递物流,并自动识别已签收单号
- 模拟美式橄榄球比赛数据(R)
- 汇编3-计算机程序是如何运行的
- Faker:快速创造大量符合测试要求的有效测试数据
- 微信公众号-模板消息管理
- 2021年N1叉车司机新版试题及N1叉车司机模拟考试题库
- 内存(DRAM)芯片国产进程
- 逻辑归纳与数学归纳:皮亚诺公理5解读1——皮亚诺读后之七
- 单片机学习笔记————为指针加上紧箍咒const,避免意外修改了只做输入接口的数据
- Docker系列:docker安装zookeeper
- Android Jetpack: ViewModel | 中文教学视频
热门文章
- 聚观早报 | 亚马逊将裁员17000人;苹果砍单MacBook等产品线架构
- PHP代码 之create_function()函数
- 假设字符串类似这样的aba和aab,abc和bca就相等,现在随便给你二组字符串,请编程比较他们看是否相等
- 关于开设《Java编程周末提高班》(第一期)的情况说明
- 服务器增加链路带宽,ESXI5 如何通过绑定双网卡来提升链路带宽?
- 什么是CRAT治疗?
- python队列_Python队列
- ​6.29黄金原油走势分析操作建议空头强势下跌美盘如何布局
- 利用正则隐藏手机号中间四位
- Python 一行代码算出每个省面积的神器—Geopandas