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 相关文章推荐
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
Sep 02 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
Feb 14 PHP
php技术实现加载字体并保存成图片
Jul 27 PHP
纯PHP代码实现支付宝批量付款
Dec 24 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
Mar 29 PHP
PHP类的特性实例分析
Sep 28 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
PHP中的Iterator迭代对象属性详解
Apr 12 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 PHP
PHP7 参数处理机制修改
Mar 09 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
论坛头像随机变换代码
2006/10/09 PHP
PHP生成树的方法
2015/07/28 PHP
javascript格式化指定日期对象的方法
2015/04/21 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
读取本地json文件,解析json(实例讲解)
2017/12/06 Python
python使用sqlite3时游标使用方法
2018/03/13 Python
python复制文件到指定目录的实例
2018/04/27 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
详解Django 时间与时区设置问题
2019/07/23 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
公司财务工作总结的自我评价
2013/11/23 职场文书
幼儿教师研修感言
2014/02/12 职场文书
小学作文评语大全
2014/04/21 职场文书
开展创先争优活动总结
2014/08/28 职场文书