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
Linux fgetcsv取得的数组元素为空字符串的解决方法
Nov 25 PHP
php生成局部唯一识别码LUID的代码
Oct 06 PHP
PHP 简易输出CSV表格文件的方法详解
Jun 20 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
PHP闭包实例解析
Sep 08 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
Apr 08 PHP
php简单判断文本编码的方法
Jul 30 PHP
详解PHP实现定时任务的五种方法
Jul 25 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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
php xml留言板 xml存储数据的简单例子
2009/08/24 PHP
php 获取百度的热词数据的代码
2012/02/18 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
PHP文件读取功能的应用实例
2015/05/08 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
[01:15:29]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第三局
2016/03/04 DOTA
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
Django对models里的objects的使用详解
2019/08/17 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
Python之Class&amp;Object用法详解
2019/12/25 Python
python退出循环的方法
2020/06/18 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
社区服务活动小结
2014/07/08 职场文书
教师节标语大全
2014/10/07 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书