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 相关文章推荐
第1次亲密接触PHP5(2)
Oct 09 PHP
PHP 5.3.0 安装分析心得
Aug 07 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
Jul 16 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
Jul 05 PHP
php实现统计邮件大小的方法
Aug 06 PHP
php发送post请求函数分享
Mar 06 PHP
destoon实现首页显示供应、企业、资讯条数的方法
Jul 15 PHP
php+ajax实现的点击浏览量加1
Apr 16 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
Jun 17 PHP
PHP正则表达式入门教程(推荐)
May 18 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 23 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
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
php curl选项列表(超详细)
2013/07/01 PHP
php curl post 时出现的问题解决
2014/01/30 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
php异常处理捕获错误整理
2019/09/23 PHP
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
vue+element实现表单校验功能
2019/05/20 Javascript
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
华为C++笔试题
2014/08/05 面试题
幼儿园美术教学反思
2014/01/31 职场文书
董事长助理岗位职责
2014/02/18 职场文书
家长写给孩子的评语
2014/04/18 职场文书
故宫英文导游词
2015/01/31 职场文书
高一军训感想
2015/08/07 职场文书
感恩主题班会教案
2015/08/12 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
python中取整数的几种方法
2021/11/07 Python
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL