冒泡排序原理

冒泡排序对一个数组里的数字进行排序,把数组里两个相邻的数比较大小,将值小的数放在前面,把大的数往后面放,当然这种排序是升序,即从小到大。
举例说明
$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)。对此我们可以用两层循环即可完成,外层循环控制循环轮次,内层循环控制每轮的比较次数。

代码

<?php
//从小到大排序
function sort_arr($array){
$count = count($array);
$temp = ; //临时变量声明
for($i = ; $i < $count - ; $i ++) { //控制轮数
for($j = ; $j < $count - - $i; $j ++) { //控制每轮次数
if ($array[$j] > $array[$j +]) {
$temp = $array[$j]; //临时变量存放
$array[$j] = $array[$j + ]; //交换位置
$array[$j + ] = $temp; //交换位置
}
}
}
return $array;
} $array = [, , , , ];
print_r( sort_arr($array) );
Array
(
[] =>
[] =>
[] =>
[] =>
[] =>
)

冒泡排序法原理讲解及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. opengl学习笔记(二):使用OpenCV来创建OpenGL窗口

    通常的增强现实应用需要支持OpenGL的OpenCV来对真实场景进行渲染.从2.4.2版本开始,OpenCV在可视化窗口中支持OpenGL.这意味着在OpenCV中可轻松渲染任何3D内容. 若要在Op ...

  2. 2.5BatchNormalzation

    BatchNormalzation是一种解决深度神经网络层数太多,而没有办法有效前向传递的问题,因为每层的输出值都会有不同的均值和方差,所以输出数据的分布也不一样. 如果对于输入的X*W本身得到的值通 ...

  3. POJ 1986 - Distance Queries - [LCA模板题][Tarjan-LCA算法]

    题目链接:http://poj.org/problem?id=1986 Description Farmer John's cows refused to run in his marathon si ...

  4. 优云软件助阵GOPS·2017全球运维大会北京站

    GOPS· 2017全球运维大会北京站于2017年7月28日-29日在北京隆重举办,汇聚国内一线运维专家和诸多运维同仁达800余名.作为长期致力于企业级高端运维市场软件开发和咨询服务的优云软件受邀参与 ...

  5. 位运算求最值 学习笔记 (待补充QAQ)

    没有什么前言?直接进入正题qwq 俩俩异或 求最值: 建trie树 O(n)枚举每个数找这个数的最值,每次反走就成,还可以剪枝一波(如果在某位已经小于ans显然可以直接return? void Ins ...

  6. linux删除指定行&删除行首空格&替换字符

    打印并删除2~1000行 nl /etc/passwd | sed '2,1000d' |more 删除行首空格 sed -i 's/^[][ ]*//g' file 替换分隔符 说明:文件中数据是由 ...

  7. java-JProfiler(四)-HelloWorld示例

    1.程序代码 package jProfiler; public class Test extends Thread{ public static void main(String[] args) t ...

  8. win10 问题:你没有权限在此位置中保存文件。请与管理员联系以获得相应权限。

    https://jingyan.baidu.com/album/b24f6c8207f09886bee5da4a.html?picindex=2 归根结底就是通过点击文件夹的属性,在安全选项处,修改操 ...

  9. spring boot上传 下载图片。

    https://blog.csdn.net/a625013/article/details/52414470 build.gradle buildscript { repositories { mav ...

  10. 使用vue如何默认选中单选框

    使用了vue以后,发现这真的是一个灵活高效的框架,能够轻松实现页面的实时刷新.那么,今天先聊聊单选框的使用.一般我们使用单选框,会这么写: //HTML <input type=" c ...