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 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
PHP insert语法详解
Jun 07 PHP
PHP 遍历文件实现代码
May 04 PHP
php格式化日期和时间格式化示例分享
Feb 24 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
Sep 22 PHP
php实现字符串首字母大写和单词首字母大写的方法
Mar 14 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
Mar 26 PHP
自制PHP框架之路由与控制器
May 07 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
Jun 19 PHP
详解phpstorm2020最新破解方法
Sep 17 PHP
TP5多入口设置实例讲解
Dec 15 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
JS回调函数简单用法示例
2017/02/09 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python文件和目录操作详解
2015/02/08 Python
python简单获取数组元素个数的方法
2015/07/13 Python
Python中subprocess的简单使用示例
2015/07/28 Python
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
用 python 进行微信好友信息分析
2020/11/28 Python
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
初中生学习生活的自我评价
2013/11/20 职场文书
军训心得体会
2013/12/31 职场文书
项目管理计划书
2014/01/09 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
一年级评语大全
2014/04/23 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
婚礼父母答谢词
2015/01/04 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书