PHP冒泡算法详解(递归实现)

yipeiwu_com5年前PHP代码库

实现

复制代码 代码如下:

/*
    冒泡算法(递归实现)
*/

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编程获取音频文件时长的方法【基于getid3类】

本文实例讲述了PHP编程获取音频文件时长的方法。分享给大家供大家参考,具体如下: 问题: 昨天在新增论坛功能的时候,移动端显示音频文件需要知道是多长的音频; 具体解决方案如下: 首先就是...

PHP调试的强悍利器之PHPDBG

PHPDBG是一个PHP的SAPI模块,可以在不用修改代码和不影响性能的情况下控制PHP的运行环境。 PHPDBG的目标是成为一个轻量级、强大、易用的PHP调试平台。可以在PHP5.4和...

PHP伪造referer实例代码

这里就直接给出完整的程序吧,具体的应用可以自己修改。 我这里给出的例子是很简单的,其实可以从这个例子中发展出很多的应用。比如隐藏真实的URL地址……嘿嘿,具体的就自己分析去吧 这里新建一...

MyEclipse常用配置图文教程

MyEclipse常用配置图文教程

  MyEclipse有很多功能,但是我们经常用到的功能其实并不是特别多,在这里将一些有用的小技巧记录下来,作为备忘录,同时也希望能够对他人有些许帮助吧。 一 工作组(working s...

JavaScript创建命名空间的5种写法

在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子: 复制代码 代码如下: var sayHello = functi...