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邮件专题
Oct 09 PHP
用PHP连mysql和oracle数据库性能比较
Oct 09 PHP
php在字符串中查找另一个字符串
Nov 19 PHP
PHP 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
PHP set_time_limit(0)长连接的实现分析
Mar 02 PHP
第三章 php操作符与控制结构代码
Dec 30 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
php curl选项列表(超详细)
Jul 01 PHP
php命名空间学习详解
Feb 27 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
Oct 17 PHP
IIS下PHP的三种配置方式对比
Nov 20 PHP
PHP连接MySQL数据库操作代码实例解析
Jul 11 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生成自定义长度随机字符串的函数分享
2014/05/04 PHP
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
java必学必会之static关键字
2015/12/03 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
angular4自定义组件详解
2017/09/28 Javascript
深入理解Node module模块
2018/03/26 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
怎样使用Python脚本日志功能
2016/08/14 Python
Python中property属性实例解析
2018/02/10 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
小学生环保倡议书
2014/05/15 职场文书
工程售后服务承诺书
2014/05/21 职场文书
离婚协议书范文2014
2014/10/16 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
调解书格式范本
2015/05/20 职场文书
九年级历史教学反思
2016/02/19 职场文书
Python进程池与进程锁之语法学习
2022/04/11 Python