一,什么是冒泡算法

冒泡算法,是一种计算机科学领域里比较简单的排序算法。它需要重复的走访过要排序的数列,依次比较两个相邻的元素,如果顺序错误就进行交换,一直到没有相邻元素需要交换,即排序完成。

这个算法的名字由来是因为越小的元素经过交换之后,会慢慢的浮到数列的顶端,就像碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

二,冒泡算法的原理

冒泡排序算法的原理如下:

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实现冒泡排序相关推荐

  1. PHP算法题:如何实现冒泡排序

    算法原理: 1.比较相邻的元素,如果第一个比第二个大,那么就交换这两个元素. 2.对每一对相邻元素做同样的工作,从第一对开始到最后一对结束,最后的元素应该会是最大的数. 3.除了最后一个元素外,针对其 ...

  2. C#基础——数组(冒泡排序)

    数组 所谓数组,就是相同数据类型的元素按一定的顺序的集合,就是把有限个类型相同的变量用一个名字来命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组的各个变量称为数组的分量 ...

  3. python实现冒泡排序完整算法_Python实现冒泡排序算法的完整实例

    冒泡排序:顾名思义就是(较小的值)像泡泡一样往上冒,(大的值)往下沉. 实现原理:依次将相邻两个数值进行比较,较小的数值移到左边,较大的数值移到右边,依次比较完第一轮后,最大的数值应该排在最右边.然后 ...

  4. 为什么双层循环 冒泡排序_冒泡排序的双重循环理解

    主要说一下冒泡排序的一些关键地方的个人理解,比如算法思想,两个循环的作用意义,中间循环变量范围的确定等. 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面 ...

  5. 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)

    冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...

  6. Equalizing Two Strings 冒泡排序or树状数组

    首先考虑排序后相等 如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES 不然的话就假设c为a,b排完 ...

  7. java冒泡排序_Java中的经典算法之冒泡排序(Bubble Sort)

    原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...

  8. python冒泡排序与常用数学计算

    一 .冒泡排序: 冒泡排序: 属于交换排序; 两两比较大小,交换位置,如同水泡大的往上(右)跑; n个数从左至右编号从0到n-1,索引0和1比较,如果索引0大,则交换两者位置; 如果索引1大则不用交换 ...

  9. Console-算法-冒泡排序法|倒水法

    ylbtech-Arithmetic:Console-算法-冒泡排序法|倒水法 1.A,案例 -- ================================================== ...

  10. java 冒泡排序和快速排序 实现

    面试的时候经常会遇到面试官让你直接手写排序算法,下面是冒泡排序和快速排序的实现. 冒泡排序 基本流程就是,自下而上比较相邻的两个元素进行比较,让大的元素往下面沉,较小的往上冒.按照排序规则进行比较,如 ...

最新文章

  1. 常用的上网 发帖技巧
  2. java第一节课程笔记、课后习题
  3. 006_Gson定制型适配器
  4. imx6 LCD 参数配置(lvds为例)
  5. 图层几何学 -- iOS Core Animation 系列二
  6. linux7安装EMC的多路径,Oracle Linux 7.8 多路径(Multipath)+Udev绑定磁盘
  7. NYOJ-疯牛(贪心)
  8. vue 写门户网站_你不得不知道的Vue项目技巧
  9. 关于加载表格及模态框数据回填的Bug
  10. 教你如何快速查询快递物流,并自动识别已签收单号
  11. 模拟美式橄榄球比赛数据(R)
  12. 汇编3-计算机程序是如何运行的
  13. Faker:快速创造大量符合测试要求的有效测试数据
  14. 微信公众号-模板消息管理
  15. 2021年N1叉车司机新版试题及N1叉车司机模拟考试题库
  16. 内存(DRAM)芯片国产进程
  17. 逻辑归纳与数学归纳:皮亚诺公理5解读1——皮亚诺读后之七
  18. 单片机学习笔记————为指针加上紧箍咒const,避免意外修改了只做输入接口的数据
  19. Docker系列:docker安装zookeeper
  20. Android Jetpack: ViewModel | 中文教学视频

热门文章

  1. 聚观早报 | 亚马逊将裁员17000人;苹果砍单MacBook等产品线架构
  2. PHP代码 之create_function()函数
  3. 假设字符串类似这样的aba和aab,abc和bca就相等,现在随便给你二组字符串,请编程比较他们看是否相等
  4. 关于开设《Java编程周末提高班》(第一期)的情况说明
  5. 服务器增加链路带宽,ESXI5 如何通过绑定双网卡来提升链路带宽?
  6. 什么是CRAT治疗?
  7. python队列_Python队列
  8. ​6.29黄金原油走势分析操作建议空头强势下跌美盘如何布局
  9. 利用正则隐藏手机号中间四位
  10. Python 一行代码算出每个省面积的神器—Geopandas