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)); 结果: 代码如下: 1 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 9 [8] => 12 )
问题: 在尝试这个实现的时候遇到了一个问题,还未解决。 在这里: 代码如下: /****************** 如果直接使用第三行,而不是先$index++,再ruturn的话就会进入死循环.我在函数的开始输出$index,都是0,就是说$index++后传递给递归函数的参数不是$index++应该的结果(即$index=$index+1). maoPao($array,$index++)不是$index++; return maoPao($array,$index);的简短写法吗,为何两种结果不一样,希望能得到各位的解答。 ******************/ 补充: 解答: 代码如下: $index = 1;
$m = $index++;
echo $index.' $index = 1;
$n = ++$index;
echo $index.' 这个可能不太好记住, 所以在使用的时候一定要注意, 在上面的问题中我就是忽略了这个问题导致了$index无限传递0值使得递归锁死。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |