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 相关文章推荐
phpMyAdmin下载、安装和使用入门教程
May 31 PHP
加强版phplib的DB类
Mar 31 PHP
php获取post中的json数据的实现方法
Jun 08 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
Oct 31 PHP
php变量范围介绍
Oct 15 PHP
CI框架中集成CKEditor编辑器的教程
Jun 09 PHP
PHP输出一个等腰三角形的方法
May 12 PHP
php导出中文内容excel文件类实例
Jul 06 PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 PHP
Yii2数据库操作常用方法小结
May 04 PHP
Laravel使用模型实现like模糊查询的例子
Oct 24 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
信用卡效验程序
2006/10/09 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
php解决约瑟夫环示例
2014/04/09 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP 无限级分类
2017/05/04 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
使用Python3制作TCP端口扫描器
2017/04/17 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
python dict 相同key 合并value的实例
2019/01/21 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
小学生班会演讲稿
2014/01/09 职场文书
银行求职自荐信范文
2015/03/04 职场文书
毕业酒会致辞
2015/07/29 职场文书
感谢师恩主题班会
2015/08/17 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
关于Numpy之repeat、tile的用法总结
2021/06/02 Python