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 相关文章推荐
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
Oct 09 PHP
BBS(php &amp; mysql)完整版(三)
Oct 09 PHP
随时给自己贴的图片加文字的php代码
Mar 08 PHP
php+mysql事务rollback&amp;commit示例
Feb 08 PHP
php网上商城购物车设计代码分享
Feb 15 PHP
php pki加密技术(openssl)详解
Jul 01 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
php的socket编程详解
Nov 20 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
php 数据库字段复用的基本原理与示例
2011/07/22 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
JavaScript 无符号右移运算符
2009/04/17 Javascript
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
Python中属性和描述符的正确使用
2016/08/23 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
python MNIST手写识别数据调用API的方法
2018/08/08 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
python的turtle库使用详解
2019/05/10 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
建筑设计所实习生自我鉴定
2013/09/25 职场文书
教师求职推荐信范文
2013/11/20 职场文书
十佳教师事迹材料
2014/01/11 职场文书
公司文体活动总结
2015/05/07 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python