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查看session内容的函数
Aug 27 PHP
sphinx增量索引的一个问题
Jun 14 PHP
php一次性删除前台checkbox多选内容的方法
Sep 22 PHP
PHP中使用Imagick操作PSD文件实例
Jan 26 PHP
php获取网页上所有链接的方法
Apr 03 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
Jul 01 PHP
PHP处理数组和XML之间的互相转换
Jun 02 PHP
PHP中header函数的用法及其注意事项详解
Jun 13 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
Symfony2创建基于域名的路由相关示例
Nov 14 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
设定php简写功能的方法
Nov 28 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的简易冒泡法代码分享
2012/08/28 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
js Flash插入函数免激活代码
2009/03/31 Javascript
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
实例分析js事件循环机制
2017/12/13 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
Python单例模式实例分析
2015/01/14 Python
编写Python CGI脚本的教程
2015/06/29 Python
python的多重继承的理解
2017/08/06 Python
解决python线程卡死的问题
2019/02/18 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
毕业生自我鉴定范文
2013/11/08 职场文书
乔迁宴答谢词
2014/01/21 职场文书
于丹论语心得观后感
2015/06/15 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
预备党员入党思想汇报(范文)
2019/08/14 职场文书
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers