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对图像的各种处理函数代码小结
Jul 08 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
分享自定义的几个PHP功能函数
Apr 15 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
PHP运行模式汇总
Nov 06 PHP
Yii2实现多域名跨域同步登录退出
Feb 04 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
Aug 30 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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
php实现查看邮件是否已被阅读的方法
2013/12/03 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
php数组去除空值函数分享
2015/02/02 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
JS的数组迭代方法
2015/02/05 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
Python脚本实现下载合并SAE日志
2015/02/10 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
Python continue继续循环用法总结
2018/06/10 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
英国二手物品交易网站:Preloved
2017/10/06 全球购物
UGG英国官方网站:UGG UK
2018/02/08 全球购物
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
升职自荐书范文
2013/11/28 职场文书
学习演讲稿范文
2014/05/10 职场文书
争先创优心得体会
2014/09/12 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
初中作文评语集锦
2014/12/25 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
Spring Boot 实现 WebSocket
2022/04/30 Java/Android