冒泡排序原理

冒泡排序对一个数组里的数字进行排序,把数组里两个相邻的数比较大小,将值小的数放在前面,把大的数往后面放,当然这种排序是升序,即从小到大。
举例说明
$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. iOS UIScrollView 3种分页方法,间隔实现

    基础知识参考 http://tech.glowing.com/cn/practice-in-uiscrollview/ https://stackoverflow.com/questions/9367 ...

  2. python2和python3的不同

    1.性能 Py3.0运行 pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可 以取得很好的优化结果. Py3.1性能比Py2 ...

  3. 线段树(Segment Tree)总结

    0 写在前面 怎么说呢,其实从入坑线段树一来,经历过两个阶段,第一个阶段是初学阶段,那个时候看网上的一些教学博文和模板入门了线段树, 然后挑选了一个线段树模板作为自己的模板,经过了一点自己的修改,然后 ...

  4. promise VS future

    Future and Promise are the two separate sides of an asynchronous operation. promise is used by the & ...

  5. Dubbo简单环境搭建

    Dubbo服务的发展和作用: 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后的常规方案演进历程. 其次,当服务越来越多之后,我们需要做哪些服务治理? 最后,是d ...

  6. 【JMeter】集合点的设置

    [JMeter]集合点的设置 简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点,每到输入用户名和密 ...

  7. C++ 指向数组的指针

    如果您对 C++ 指针的概念有所了解,那么就可以开始本章的学习.数组名是一个指向数组中第一个元素的常量指针.因此,在下面的声明中: double balance[50]; balance 是一个指向 ...

  8. POJ:3083 Children of the Candy Corn(bfs+dfs)

    http://poj.org/problem?id=3083 Description The cornfield maze is a popular Halloween treat. Visitors ...

  9. Py-apply用法学习【转载】

    转自:https://blog.csdn.net/anshuai_aw1/article/details/82347016 1.Apply Python中apply函数的格式为:apply(func, ...

  10. CMFCPropertyGridProperty的使用

    设定初始值 CString str(_T("Button")); COleVariant cOlevariant(str); pTypeProperty->SetOrigin ...