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中循环语句的用法介绍
Jan 30 PHP
使用PHP导出Redis数据到另一个Redis中的代码
Mar 12 PHP
php利用smtp类实现电子邮件发送
Oct 30 PHP
是 WordPress 让 PHP 更流行了 而不是框架
Feb 03 PHP
PHP文件上传处理案例分析
Oct 15 PHP
phpcms的分类名称和类别名称的调用
Jan 05 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
php curl获取到json对象并转成数组array的方法
May 31 PHP
thinkPHP框架中layer.js的封装与使用方法示例
Jan 18 PHP
laravel 关联关系遍历数组的例子
Oct 10 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 错误处理经验分享
2011/10/11 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
javascript EXCEL 操作类代码
2009/07/30 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
JQuery球队选择实例
2015/05/18 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
详解python读取和输出到txt
2019/03/29 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
《藤野先生》教学反思
2014/02/19 职场文书
师德师风学习材料
2014/12/19 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
大学生活感想
2015/08/10 职场文书