PHP冒泡算法详解(递归实现)


Posted in PHP onNovember 10, 2014

实现

/*

    冒泡算法(递归实现)

*/
function maoPao($array, $index=0)

{

    $count = count($array);

    if(($count-1) <= $index)

        return $array;
    for($i=$count-1; $i>$index; $i-- )

    {

        if($array[$i] < $array[$i-1])

        {

            $tmp = $array[$i];

            $array[$i] = $array[$i-1];

            $array[$i-1] = $tmp;

        }

    }

    $index++;

    return maoPao($array, $index);

    //return maoPao($array, $index++);

}
    $arr = array(12,4,3,1,9,5,6,8,7);

    var_dump(maoPao($arr));

结果:

Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 9 [8] => 12 )

问题:

在尝试这个实现的时候遇到了一个问题,还未解决。
在这里:

$index++;

return maoPao($array, $index);

//return maoPao($array, $index++);
/******************

    如果直接使用第三行,而不是先$index++,再ruturn的话就会进入死循环.我在函数的开始输出$index,都是0,就是说$index++后传递给递归函数的参数不是$index++应该的结果(即$index=$index+1).

    maoPao($array, $index++)不是$index++; return maoPao($array, $index);的简短写法吗,为何两种结果不一样,希望能得到各位的解答。

******************/

补充:

解答:

$index++与++$index两者的区别, $index++被称作后增量, ++$index被称为前增量, 虽然最后的$index的结果都是会+1。 但传递变量的时候会有不一样的地方。
$index = 1;

$m = $index++;

echo $index.'<br/>';  //结果为2

echo $m.'<br/>';      //结果为1. 因为是后增量, 会先把初始的$index=1 赋给$m,然后$index自增1;
$index = 1;

$n = ++$index;

echo $index.'<br/>';  //结果为2

echo $n;              //结果为2.因为是前增量, 会先执行$index+1的操作, 再赋值给$n;

这个可能不太好记住, 所以在使用的时候一定要注意, 在上面的问题中我就是忽略了这个问题导致了$index无限传递0值使得递归锁死。

PHP 相关文章推荐
PHP中在数据库中保存Checkbox数据(2)
Oct 09 PHP
来自PHP.NET的入门教程
Oct 09 PHP
优化PHP代码的53条建议
Mar 27 PHP
mysql+php分页类(已测)
Mar 31 PHP
php 无限分类的树类代码
Dec 03 PHP
php cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
Jun 25 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
May 09 PHP
php自定义函数实现JS的escape的方法示例
Jul 07 PHP
学习PHP Cookie处理函数
Aug 09 PHP
PHP配置ZendOpcache插件加速
Feb 14 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 #PHP
PHP 快速排序算法详解
Nov 10 #PHP
PHP基于CURL进行POST数据上传实例
Nov 10 #PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 #PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 #PHP
php学习笔记之面向对象
Nov 08 #PHP
php学习笔记之基础知识
Nov 08 #PHP
You might like
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
百度地图api如何使用
2015/08/03 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
简单谈谈python的反射机制
2016/06/28 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
德购商城:德国进口直邮商城
2017/06/13 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
导游的职业规划书范文
2013/12/27 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书