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

 更新时间:2014年11月10日 10:06:40   投稿:hebedich  
本文是分享了一段使用递归实现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四大安全策略

    PHP四大安全策略

    这篇文章主要介绍了PHP中的文件系统安全、数据库安全、用户数据安全等安全相关的问题,需要的朋友可以参考下
    2014-03-03
  • php短址转换实现方法

    php短址转换实现方法

    这篇文章主要介绍了php短址转换实现方法,涉及网址及字符串的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • DISCUZ 论坛管理员密码忘记的解决方法

    DISCUZ 论坛管理员密码忘记的解决方法

    discuz忘记密码的处理方法也大同小异,一般情况的密码修改工具,也是利用直接将密码写入数据库中。
    2009-05-05
  • 简单的方法让你的后台登录更加安全(php中加session验证)

    简单的方法让你的后台登录更加安全(php中加session验证)

    通过特定文件为后台入口注册session,否则失败退出。即直接使用原后台地址将无法登录后台。这样一来,入口文件名的多样性、可变更性将为你的后台登录提供更加安全的环境
    2012-08-08
  • mac 下安装php7全过程介绍

    mac 下安装php7全过程介绍

    下面小编就为大家介绍一下mac 下安装php7全过程。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • php多进程中的阻塞与非阻塞操作实例分析

    php多进程中的阻塞与非阻塞操作实例分析

    这篇文章主要介绍了php多进程中的阻塞与非阻塞操作,结合实例形式分析了php多进程中的阻塞与非阻塞原理、阻塞控制方法与相关操作技巧,需要的朋友可以参考下
    2020-03-03
  • PHP使用flock实现文件加锁的方法

    PHP使用flock实现文件加锁的方法

    这篇文章主要介绍了PHP使用flock实现文件加锁的方法,实例分析了flock文件锁的使用技巧,需要的朋友可以参考下
    2015-07-07
  • php使用cookie保存用户登录的用户名实例

    php使用cookie保存用户登录的用户名实例

    这篇文章主要介绍了php使用cookie保存用户登录的用户名实现方法,实例形式完整分析了cookie保存用户登录名的技巧,需要的朋友可以参考下
    2015-01-01
  • PHP简单创建压缩图的方法

    PHP简单创建压缩图的方法

    这篇文章主要介绍了PHP简单创建压缩图的方法,通过自定义函数实现压缩图像的功能,涉及php图片的读取与图形图像的创建相关技巧,需要的朋友可以参考下
    2016-08-08
  • 浅谈并发处理PHP进程间通信之System V IPC

    浅谈并发处理PHP进程间通信之System V IPC

    对于进程间通信,每一个完备的语言都应该有对应的处理方式,而 PHP 对应的则是一族对 UNIX SYSTEM V包装的函数,包括信号量(semaphore)、共享内存(shared memory)和消息队列(msg queue)的操作。
    2021-05-05

最新评论