冒泡排序原理

冒泡排序对一个数组里的数字进行排序,把数组里两个相邻的数比较大小,将值小的数放在前面,把大的数往后面放,当然这种排序是升序,即从小到大。
举例说明
$array = [64, 56, 31, 68, 6];
数组中有五个元素,按照原理说法,再详细说一下做几轮比较和比较的细节。
第一轮[64, 56, 31, 68, 6]:
第一次比较是拿64和56比较,也就是$array[0] 和 $array [1] 比较,因为64比56大,那么56放在前面,64放在后面,结果为 [56, 64, 31, 68, 6]
第二次比较是拿64和31比较,也就是$array[1] 和 $array [2] 比较,因为64比31大,那么31放在前面,64放在后面,结果为 [56, 31, 64, 68, 6]
第三次比较是拿64和68比较,也就是$array[2] 和 $array [3] 比较,因为68比64大,那么64保持在前,68保持在后,结果为 [56, 31, 64, 68, 6]
第四次比较是拿68和6比较 ,也就是$array[3] 和 $array [4] 比较,因为68比6 大,那么6放在前面, 68放在前面,结果为 [56, 31, 64, 6, 68]
 
到此,第一轮比较结束,从最后的结果里[56, 31, 64, 6, 68]看出,并没有按照从小到大的结果排列,但是68作为数组里最大的值,已经放到了最后面,我们下次排序是不是可以不管最后一个数了?
由此可想而知,第二轮就少了一次比较,也就是三次就可以了,以此推理,比较的次数越来越少。

第二轮[56, 31, 64, 6, 68]:
第一次比较是拿56和31比较,也就是$array[0] 和 $array [1] 比较,因为56比31大,那么31放在前面,56放在后面,结果为 [31, 56, 64, 6, 68]
第二次比较是拿56和64比较,也就是$array[1] 和 $array [2] 比较,因为64比56大,那么56保持在前,64保持在前,结果为 [31, 56, 64, 6, 68]
第三次比较是拿64和6 比较,也就是$array[2] 和 $array [3] 比较,因为64比6 大,那么6 放在前面,64放在后面,结果为 [31, 56, 6, 64, 68]

到此,结果为[31, 56, 6, 64, 68],继续~

第三轮[31, 56, 6, 64, 68]:
第一次比较是拿56和31比较,也就是$array[0] 和 $array [1] 比较,因为56比31大,那么31保持在前,56保持在前,结果为 [31, 56, 6, 64, 68]
第二次比较是拿56和6 比较,也就是$array[1] 和 $array [2] 比较,因为56比 6大,那么 6放在前面,56放在后面,结果为 [31, 6, 56, 64, 68]

到此,结果为[31, 6, 56, 64, 68],继续~

第四轮[31, 6, 56, 64, 68]:
最后一次比较是拿31和6比较,也就是$array[0] 和 $array [1] 比较,因为31比6大,那么6放在前面,31放在后面,结果为 [6, 31, 56, 64, 68]
 
到此,结果为[6, 31, 56, 64, 68],结束~
  

仔细观察下,5个元素的数组。比较了四轮,并且每轮比较的次数是逐渐减少的(-1)。对此我们可以用两层循环即可完成,外层循环控制循环轮次,内层循环控制每轮的比较次数。

代码

  1. <?php
  2. //从小到大排序
  3. function sort_arr($array){
  4. $count = count($array);
  5. $temp = ; //临时变量声明
  6. for($i = ; $i < $count - ; $i ++) { //控制轮数
  7. for($j = ; $j < $count - - $i; $j ++) { //控制每轮次数
  8. if ($array[$j] > $array[$j +]) {
  9. $temp = $array[$j]; //临时变量存放
  10. $array[$j] = $array[$j + ]; //交换位置
  11. $array[$j + ] = $temp; //交换位置
  12. }
  13. }
  14. }
  15. return $array;
  16. }
  17.  
  18. $array = [, , , , ];
  19. print_r( sort_arr($array) );
  1. Array
  2. (
  3. [] =>
  4. [] =>
  5. [] =>
  6. [] =>
  7. [] =>
  8. )

冒泡排序法原理讲解及PHP代码示例的更多相关文章

  1. CNN(卷积神经网络)原理讲解及简单代码

    一.原理讲解 1. 卷积神经网络的应用 分类(分类预测) 检索(检索出该物体的类别) 检测(检测出图像中的物体,并标注) 分割(将图像分割出来) 人脸识别 图像生成(生成不同状态的图像) 自动驾驶 等 ...

  2. SQL注入原理与解决方法代码示例

    一.什么是sql注入? 1.什么是sql注入呢? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网 ...

  3. Golang实现冒泡排序法

    关于冒泡排序的原理请看本博客这篇文章冒泡排序法原理讲解及PHP代码示例 //代码 package main import ( "fmt" ) func main() { //定义一 ...

  4. pureMVC简单示例及其原理讲解五(Facade)

    本节将讲述Facade,Proxy.Mediator.Command的统一管家.自定义Facade必须继承Facade,在本示例中自定义Facade名称为ApplicationFacade,这个名称也 ...

  5. pureMVC简单示例及其原理讲解四(Controller层)

    本节将讲述pureMVC示例中的Controller层. Controller层有以下文件组成: AddUserCommand.as DeleteUserCommand.as ModelPrepCom ...

  6. pureMVC简单示例及其原理讲解三(View层)

    本篇说的是View层,即视图层,在本示例中包括两个部分:MXML文件,即可视控件:Mediator. 可视控件 可视控件由UserForm.mxml(图1)和UserList.mxml(图2)两个文件 ...

  7. JAVA NIO工作原理及代码示例

    简介:本文主要介绍了JAVA NIO中的Buffer, Channel, Selector的工作原理以及使用它们的若干注意事项,最后是利用它们实现服务器和客户端通信的代码实例. 欢迎探讨,如有错误敬请 ...

  8. [GO]冒泡排序的原理和代码实现

    冒泡排序的原理:对于一个数组里所有的元素进行两两比较,发生大于则变换数组下标则为升序排序,发生小于则变换数据下标的则为降序排序 比如给定的数组为[1, -2, 3, -4],对于我们的需求,两两比较后 ...

  9. C语言冒泡排序法分析及代码实现

    冒泡排序法: 所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法.具体方法是,相邻数值两两交换.从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换( ...

随机推荐

  1. 小程序中navigator和wx.navigateTo,wx.redirectTo,wx.reLaunch,wx.switchTab,wx.navigateBack的用法

    如果用一句话来表明navigator和API中wx.系列的跳转有什么区别,那就是navigator是在wxml中用标签添加open-type属性来达到和wx.系列一样的效果. navigator的属性 ...

  2. JVM JRE JDK三者的区别和联系

    一. 详细介绍1.JVM -- java virtual machineJVM就是我们常说的java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程序会首先被编译为.class的类 ...

  3. HDU 5512 - Pagodas - [gcd解决博弈]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5512 Time Limit: 2000/1000 MS (Java/Others) Mem ...

  4. oel5.5安装mysql数据库初始化报错解决办法

    [root@chavinking mysql]# scripts/mysql_install_db --user=mysqlInstalling MySQL system tables...2016- ...

  5. oozie学习笔记

    #################################################################################################### ...

  6. 使用Intel IPT技术保护您的帐号安全

    使用Intel IPT技术保护您的帐号安全

  7. 【Python】【亲测好用】安装第三方包报错:AttributeError:'module' object has no attribute 'main'

    安装/卸载第三包可能出现如下问题及相应解决办法: 在pycharm编辑中,使用anconda2更新.卸载第三方包时,出现如下错误: AttributeError:'module' object has ...

  8. list的方法、操作

    序号 分类 关键字 / 函数 / 方法 说明 1 增加 列表.insert(索引, 数据) 在指定位置插入数据     列表.append(数据) 在末尾追加数据     列表.extend(列表2) ...

  9. memcached-session-manager 教程实现session共享

    1简单介绍     1.1决定用什么序列化策略.     1.2配置tomcat         1.2.1加入 memcached-session-manager jar 包到tomcat中.    ...

  10. Agreementhasbeenupdated--EditPhoneNumber

    1.https://appleid.apple.com/#!&page=signin 登录appid账号  在账户里面的编辑 添加更多信息,新增手机号 2.如果不可以 可以试下这个https: ...