摘要:實(shí)現(xiàn)冒泡算法遞歸實(shí)現(xiàn)結(jié)果問題在嘗試這個實(shí)現(xiàn)的時候遇到了一個問題,還未解決。補(bǔ)充解答與兩者的區(qū)別,被稱作后增量,被稱為前增量,雖然最后的的結(jié)果都是會。但傳遞變量的時候會有不一樣的地方。
實(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 )問題:
在嘗試這個實(shí)現(xiàn)的時候遇到了一個問題,還未解決。
在這里:
$index++; return maoPao($array, $index); //return maoPao($array, $index++); /****************** 如果直接使用第三行,而不是先$index++,再ruturn的話就會進(jìn)入死循環(huán).我在函數(shù)的開始輸出$index,都是0,就是說$index++后傳遞給遞歸函數(shù)的參數(shù)不是$index++應(yīng)該的結(jié)果(即$index=$index+1). maoPao($array, $index++)不是$index++; return maoPao($array, $index);的簡短寫法嗎,為何兩種結(jié)果不一樣,希望能得到各位的解答。 ******************/
補(bǔ)充:
解答:$index++與++$index兩者的區(qū)別, $index++被稱作后增量, ++$index被稱為前增量, 雖然最后的$index的結(jié)果都是會+1。 但傳遞變量的時候會有不一樣的地方。
$index = 1; $m = $index++; echo $index."
"; //結(jié)果為2 echo $m."
"; //結(jié)果為1. 因?yàn)槭呛笤隽浚?會先把初始的$index=1 賦給$m,然后$index自增1; $index = 1; $n = ++$index; echo $index."
"; //結(jié)果為2 echo $n; //結(jié)果為2.因?yàn)槭乔霸隽浚?會先執(zhí)行$index+1的操作, 再賦值給$n;
這個可能不太好記住, 所以在使用的時候一定要注意, 在上面的問題中我就是忽略了這個問題導(dǎo)致了$index無限傳遞0值使得遞歸鎖死。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/20873.html
摘要:本文將介紹快速排序計數(shù)排序梳排序堆排序歸并排序希爾排序選擇排序插入排序地精排序聯(lián)合冒泡排序雞尾酒排序冒泡排序奇偶排序使用標(biāo)志的冒泡排序種排序算法的實(shí)現(xiàn)。是一種不穩(wěn)定的排序算法。 本文將介紹快速排序、計數(shù)排序、梳排序、堆排序、歸并排序、希爾排序、選擇排序、插入排序、地精排序、聯(lián)合冒泡排序、雞尾酒排序、冒泡排序、奇偶排序、使用標(biāo)志的冒泡排序14種排序算法的實(shí)現(xiàn)。本文是由于閱讀了文章《測試評...
摘要:概念這里借用百度百科的一張圖來,非常形象快速排序算法是對冒泡算法的一個優(yōu)化。獲取已經(jīng)打亂了順序的數(shù)組快速排序這里引用的是我之前寫的冒泡算法排序冒泡運(yùn)行結(jié)果 概念 這里借用百度百科的一張圖來,非常形象:showImg(https://segmentfault.com/img/bVdlR6); 快速排序算法是對冒泡算法的一個優(yōu)化。他的思想是先對數(shù)組進(jìn)行分割, 把大的元素數(shù)值放到一個臨時數(shù)...
摘要:而在證明算法是正確的基礎(chǔ)上,第二步就是分析算法的時間復(fù)雜度。算法的時間復(fù)雜度反映了程序執(zhí)行時間隨輸入規(guī)模增長而增長的量級,在很大程度上能很好反映出算法的優(yōu)劣與否。 showImg(https://segmentfault.com/img/remote/1460000016451712?w=800&h=341); 前言 雖然工作中,你覺得自己并沒有涉及到算法這方面的東西,但是算法是程序的...
摘要:良好的排序算法具有進(jìn)行最少的比較和交換的特征。冒泡排序是一個基于比較的排序算法,被認(rèn)為是效率最低的排序算法之一。現(xiàn)在讓我們使用實(shí)現(xiàn)冒泡排序算法。插入排序到目前為止,我們已經(jīng)看到了兩種基于比較的排序算法。 預(yù)警 本文適合對于排序算法不太了解的新手同學(xué)觀看,大佬直接忽略即可。因?yàn)榭紤]到連貫性,所以篇幅較長。老鐵們看完需要大概一個小時,但是從入門到完全理解可能需要10個小時(哈哈哈,以我自己...
摘要:快速排序快速排序是對冒泡排序的一種改進(jìn)。獲取中間數(shù)兩值相等,返回元素比目標(biāo)大,查找左部元素比目標(biāo)小,查找右部查找失敗擴(kuò)展閱讀冒泡排序?qū)崿F(xiàn)快速排序?qū)崿F(xiàn)各種經(jīng)典算法常見算法面試篇實(shí)現(xiàn)二分查找法 本書的 GitHub 地址:https://github.com/todayqq/PH... 算法可以說是大廠的必考題,對于算法,一定要理解其中的精髓、原理。 冒泡排序 冒泡排序的原理:一組數(shù)據(jù),...
閱讀 2179·2021-11-25 09:43
閱讀 2261·2021-11-24 09:39
閱讀 1555·2021-11-22 12:02
閱讀 2992·2021-11-17 09:33
閱讀 3418·2021-11-15 11:38
閱讀 2744·2021-10-13 09:40
閱讀 1075·2021-09-22 15:41
閱讀 1693·2019-08-30 10:58