当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-25 11:28:52 浏览: 评论:0 

本文是分享了一段使用递归实现php冒泡算法的代码,并记录了使用过程终于到的问题以及解决方法,有需要的小伙伴可以参考下哦。

实现代码如下:

  1. /* 
  2.     冒泡算法(递归实现) 
  3. */ 
  4. function maoPao($array$index=0) 
  5.     $count = count($array); 
  6.     if(($count-1) <= $index
  7.         return $array
  8.  
  9.     for($i=$count-1; $i>$index$i-- ) 
  10.     { 
  11.         if($array[$i] < $array[$i-1]) 
  12.         { 
  13.             $tmp = $array[$i]; 
  14.             $array[$i] = $array[$i-1]; 
  15.             $array[$i-1] = $tmp
  16.         } 
  17.     }//www.phpfensi.com 
  18.     $index++; 
  19.     return maoPao($array$index); 
  20.     //return maoPao($array, $index++); 
  21.  
  22.     $arr = array(12,4,3,1,9,5,6,8,7); 
  23.     var_dump(maoPao($arr)); 

结果:

Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 9 [8] => 12 )

问题:

在尝试这个实现的时候遇到了一个问题,还未解决。

在这里:

  1. $index++; 
  2. return maoPao($array$index); 
  3. //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。 但传递变量的时候会有不一样的地方。

  1. $index = 1; 
  2. $m = $index++; 
  3. echo $index.'<br/>';  //结果为2 
  4. echo $m.'<br/>';      //结果为1. 因为是后增量, 会先把初始的$index=1 赋给$m,然后$index自增1; 
  5.  
  6. $index = 1; 
  7. $n = ++$index
  8. echo $index.'<br/>';  //结果为2 
  9. echo $n;              //结果为2.因为是前增量, 会先执行$index+1的操作, 再赋值给$n; 

这个可能不太好记住, 所以在使用的时候一定要注意, 在上面的问题中我就是忽略了这个问题导致了$index无限传递0值使得递归锁死。

Tags: PHP冒泡算法 PHP递归

分享到: