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 相关文章推荐
一个简单的自动发送邮件系统(三)
Oct 09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
Dec 06 PHP
PHP HTML代码串 截取实现代码
Jun 29 PHP
php str_pad 函数用法简介
Jul 11 PHP
php下目前为目最全的CURL中文说明
Aug 01 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
深入array multisort排序原理的详解
Jun 18 PHP
php使用递归计算文件夹大小
Dec 24 PHP
PHP连接操作access数据库实例
Mar 30 PHP
PHP页面跳转实现延时跳转的方法
Dec 10 PHP
php图片裁剪函数
Oct 31 PHP
PHP中抽象类,接口功能、定义方法示例
Feb 26 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
php+mysqli使用面向对象方式更新数据库实例
2015/01/29 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
JS表单传值和URL编码转换
2018/03/03 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
itchat接口使用示例
2017/10/23 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
Python assert关键字原理及实例解析
2019/12/13 Python
python基于property()函数定义属性
2020/01/22 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
采购经理岗位职责
2014/02/16 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
个人委托书格式
2014/04/04 职场文书
大学毕业寄语大全
2014/04/10 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
python not运算符的实例用法
2021/06/30 Python
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL