我發現很多公司面試的時候都會出一道冒泡算法的題,這么基礎的算法,一般程序員應該都寫得出來,但是今天我在網上看了一下,發現很多文章中的冒泡算法都是錯的,根本就不是冒泡算法!還堂而皇之的說什么解析冒泡算法,真是誤導新人啊。我就直接上代碼了,這,才是冒泡算法。
<?phpfunction bubbleSort($ary){ $len = count($ary); for ($i=0; $i < $len - 1; $i++) { for ($j=0; $j < $len - 1 -$i; $j++) { if ($ary[$j] > $ary[$j + 1]) { $tmp = $ary[$j]; $ary[$j] = $ary[$j + 1]; $ary[$j + 1] = $tmp; } } } return $ary;}$ary = [7,6,789,3,56,8,1234,45];$newAry = bubbleSort($ary);print_r($newAry);?>
好吧,下面我就說說,什么不是冒泡算法。
當然啦,首先要說說什么才是冒泡算法,它的作用是把一個亂序數組按照大小順序排列。實現原理我就直接拿個實例來說明吧。
$ary = [7,6,78,1];把這個數組從小到大進行排列,首先把第一個數和第二個數進行比較,在這個數組里就是7和6比較,7比6大,第一次循環后數組就變成這個樣子。
$ary = [6,7,78,1];第二次循環7和78比較,結果不變。
$ary = [6,7,78,1];
第三次78和1比較,78比1大,調換位置,結果
$ary = [6,7,1,78];這樣內部就循環完一次了,開始進行第二次循環,跟上面一樣的,我就不細寫了。
這就是冒泡算法,名字起得非常形象,就像一個個小泡泡往上冒一樣。
但是我在百度搜索“冒泡算法”,出來的第一篇文章是這個
經典排序算法 - 冒泡排序Bubble sort
他給出的代碼是這樣的:
html' target='_blank'>static void bubble_sort(int[] unsorted) { for (int i = 0; i < unsorted.Length; i++) { for (int j = i; j < unsorted.Length; j++) { if (unsorted[i] > unsorted[j]) { int temp = unsorted[i]; unsorted[i] = unsorted[j]; unsorted[j] = temp; } } } } static void Main(string[] args) { int[] x = { 6, 2, 4, 1, 5, 9 }; bubble_sort(x); foreach (var item in x) { Console.WriteLine(item); } Console.ReadLine(); }這明顯不是冒泡算法好嗎?!
這個算法是從一個數組的第一個數開始,分別與他后面的所有數字比較,如果比后面的數字大,就互相調換位置,雖然最后也能得到正確結果,但這根本不是冒泡算法,可能叫另一種算法吧。真是誤人子弟。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答