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 5.0 Pear安装方法
Dec 06 PHP
php adodb连接带密码access数据库实例,测试成功
May 14 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
php mysql_real_escape_string函数用法与实例教程
Sep 30 PHP
PHP整数取余返回负数的相关解决方法
May 15 PHP
PHP使用redis实现统计缓存mysql压力的方法
Nov 14 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
Jan 05 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
浅谈Laravel中的一个后期静态绑定
Aug 11 PHP
PHP实现验证码校验功能
Nov 16 PHP
PHP常用日期加减计算方法实例小结
Jul 31 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的安全
2006/10/09 PHP
小文件php+SQLite存储方案
2010/09/04 PHP
php多文件上传实现代码
2014/02/20 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
2015/12/07 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
python中kmeans聚类实现代码
2018/02/23 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
将python代码和注释分离的方法
2018/04/21 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
财务部经理岗位职责
2014/02/03 职场文书
教师现实表现材料
2014/02/14 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
关于环保的活动方案
2014/08/25 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
vue实现拖拽交换位置
2022/04/07 Vue.js