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 include的妙用,实现路径加密
Jul 29 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
Jun 13 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
Jun 17 PHP
8个必备的PHP功能实例代码
Oct 27 PHP
PHP中iconv函数转码时截断字符问题的解决方法
Jan 21 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
May 13 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
使用Zttp简化Guzzle 调用
Jul 02 PHP
PHP基于socket实现客户端和服务端通讯功能
Jul 13 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的分页功能
2007/03/21 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
vant实现购物车功能
2020/06/29 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
在Python中使用成员运算符的示例
2015/05/13 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
keras打印loss对权重的导数方式
2020/06/10 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
Java基础类库面试题
2013/09/04 面试题
骨干教师培训感言
2014/01/16 职场文书
年终晚会主持词
2014/03/25 职场文书
网页美工求职信范文
2014/04/17 职场文书
面试感谢信范文
2015/01/22 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
入党申请书格式
2019/06/20 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS