PHP冒泡算法詳解(遞歸實(shí)現(xiàn))
實(shí)現(xiàn)
/*
冒泡算法(遞歸實(shí)現(xiàn))
*/
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));
結(jié)果:
Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 9 [8] => 12 )
問(wèn)題:
在嘗試這個(gè)實(shí)現(xiàn)的時(shí)候遇到了一個(gè)問(wèn)題,還未解決。
在這里:
$index++;
return maoPao($array, $index);
//return maoPao($array, $index++);
/******************
如果直接使用第三行,而不是先$index++,再ruturn的話就會(huì)進(jìn)入死循環(huán).我在函數(shù)的開(kāi)始輸出$index,都是0,就是說(shuō)$index++后傳遞給遞歸函數(shù)的參數(shù)不是$index++應(yīng)該的結(jié)果(即$index=$index+1).
maoPao($array, $index++)不是$index++; return maoPao($array, $index);的簡(jiǎn)短寫法嗎,為何兩種結(jié)果不一樣,希望能得到各位的解答。
******************/
補(bǔ)充:
解答:
$index++與++$index兩者的區(qū)別, $index++被稱作后增量, ++$index被稱為前增量, 雖然最后的$index的結(jié)果都是會(huì)+1。 但傳遞變量的時(shí)候會(huì)有不一樣的地方。
$index = 1;
$m = $index++;
echo $index.'<br/>'; //結(jié)果為2
echo $m.'<br/>'; //結(jié)果為1. 因?yàn)槭呛笤隽浚?會(huì)先把初始的$index=1 賦給$m,然后$index自增1;
$index = 1;
$n = ++$index;
echo $index.'<br/>'; //結(jié)果為2
echo $n; //結(jié)果為2.因?yàn)槭乔霸隽浚?會(huì)先執(zhí)行$index+1的操作, 再賦值給$n;
這個(gè)可能不太好記住, 所以在使用的時(shí)候一定要注意, 在上面的問(wèn)題中我就是忽略了這個(gè)問(wèn)題導(dǎo)致了$index無(wú)限傳遞0值使得遞歸鎖死。
- PHP遞歸的三種常用方式
- php遞歸函數(shù)三種實(shí)現(xiàn)方法及如何實(shí)現(xiàn)數(shù)字累加
- PHP 無(wú)限分類三種方式 非函數(shù)的遞歸調(diào)用!
- php菜單/評(píng)論數(shù)據(jù)遞歸分級(jí)算法的實(shí)現(xiàn)方法
- PHP遞歸算法的簡(jiǎn)單實(shí)例
- PHP基于遞歸算法解決兔子生兔子問(wèn)題
- PHP基于非遞歸算法實(shí)現(xiàn)先序、中序及后序遍歷二叉樹(shù)操作示例
- PHP基于二分法實(shí)現(xiàn)數(shù)組查找功能示例【循環(huán)與遞歸算法】
- PHP實(shí)現(xiàn)字符串翻轉(zhuǎn)功能的方法【遞歸與循環(huán)算法】
- PHP基于遞歸實(shí)現(xiàn)的約瑟夫環(huán)算法示例
- PHP使用遞歸算法無(wú)限遍歷數(shù)組示例
- php獲得文件夾下所有文件的遞歸算法的簡(jiǎn)單實(shí)例
- PHP二分查找算法示例【遞歸與非遞歸方法】
- 關(guān)于PHP遞歸算法和應(yīng)用方法介紹
- PHP遞歸算法的詳細(xì)示例分析
- php全排列遞歸算法代碼
- php實(shí)現(xiàn)遞歸的三種基本方式
相關(guān)文章
PHP5下$_SERVER變量不再受magic_quotes_gpc保護(hù)的彌補(bǔ)方法
在php5的環(huán)境中我們的$_SERVER變量將不再受magic_quotes_gpc的保護(hù),至于程序該如何加強(qiáng)自己的安全性,下面我們總結(jié)了怎么保護(hù)php中的cookie,get,post,files數(shù)據(jù)哦,有需要的朋友可參考一下2012-10-10
php mysql數(shù)據(jù)庫(kù)操作分頁(yè)類
如果您加了新功能,或者是有改進(jìn),請(qǐng)與大家一起分享。2008-06-06
如何給phpcms v9增加類似于phpcms 2008中的關(guān)鍵詞表
本篇文章是對(duì)給phpcms v9增加類似于phpcms 2008中的關(guān)鍵詞表的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07

