說來慚愧,幹了4年的程序員居然連冒泡排序也講不清楚。
精通算法的老鳥請繞道,這篇文章就當給入門的兄弟,和我自己做做算法入門普及。
冒泡排序
這個名字很形象,把整個算法弄懂就像是水裏的泡泡。它的算法複雜度是O(n2 )級的。
舉個例子,有一個數組:
PHP $array = array("49","38","65","97","76","13","27");
現在,我要把它按照從小到大的順序排列。希望的結果就像:
$array = array("13","27","38","49","65","76","97");
OK,冒泡開始。先讓最輕的泡泡(最小的數),浮到水面。具體算法可以是對每2個元素進行比較,如果後面一個比前面一個小,則兩個元素替換位置。
PHP:
for($i=count($array);$i>0;$i--){
if($array[$i-1] > $array[$i]){
$temp = $array[$i];
$array[$i] = $array[$i-1]
$array[$i-1] = $temp;
}
}
看看排後的結果: $array = array("13","49","38","65","97","76","27");
看看,最小的數13已經排到了第一位。
剩下的我們就要把次小數,即27排到第二位。
算法,php:
for($i = count($array)-1;$i>0;$i--){
類似....
}
結果: $array = array("13","27","49","38","65","97","76");
然後重複,次次小數,次次次小數....重複重複再重複,排序搞定。