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部分常见问题总结
Oct 09 PHP
用PHP发电子邮件
Oct 09 PHP
PHP远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
PHP学习 变量使用总结
Mar 24 PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
PHP数据库连接mysql与mysqli对比分析
Jan 04 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
PHP memcache在微信公众平台的应用方法示例
Sep 13 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 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 静态变量与自定义常量的使用方法
2010/01/26 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
Python中pygame安装方法图文详解
2015/11/11 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
python爬虫增加访问量的方法
2019/08/22 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
彪马英国官网:PUMA英国
2019/02/11 全球购物
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
农行实习自我鉴定
2013/09/22 职场文书
信息工程学院毕业生推荐信
2013/11/05 职场文书
物业工作计划书
2014/01/10 职场文书
小学新学期寄语
2014/04/02 职场文书
maven依赖的version声明控制方式
2022/01/18 Java/Android
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL