在實際中,氣泡排序的使用還是極少的,面試中可能會問到。它適合資料量級很小的情況,其演算法的效率比較低,但是作為入門的排序演算法,還是值得學習的。
氣泡排序的基本思想就是不斷比較相鄰的兩個數,讓較大的元素不斷地往後移。經過一輪比較,就選出最大的數;經過第2輪比較,就選出次大的數,以此類推。
演算法例析:
下面以對 9, 3, 5, 8, 2, 7 進行氣泡排序說明。
第一輪 排序過程
9, 3, 5, 8, 2, 7 (最初)
3, 9,5, 8, 2, 7 (比較9和3,9 > 3,交換)
3,5, 9, 8, 2, 7 (比較9和5,9 > 5,交換)
3, 5,8, 9, 2, 7 (比較9和8,交換)
3, 5, 8,2, 9, 7 (比較9和2,交換)
3, 5, 8, 2,7, 9(比較9和7,交換)
第一輪結束後,最大的數9在最後面,因此後一輪排序只需對剩下的5個數排序。
第二輪 排序過程
3, 5, 8, 2, 7, 9 (第一輪排序結果)
3, 5, 8, 2, 7, 9(比較3和5,不交換)
3,5, 8, 2, 7, 9 (比較5和8,不交換)
3, 5,2, 8, 7, 9 (比較8和2,交換)
3, 5, 2,7, 8, 9 (比較8和7,交換)
3, 5, 2, 7,8, 9(比較8和9,不交換)
第二輪結束,第二大的數排在倒數第二個位置,所以後一輪排序只需對剩下的4個數進行排序。
第三輪,第四輪,第五輪排序過程就不詳細寫出來了,讀者可以自行寫出詳細過程。下面給出每輪排序的結果。
規律總結
(假設陣列中有n個數)
- 要進行比較的「趟數」為n-1
- 每一趟確定乙個「最大數」(剩餘的數中)
- 每一趟要比較的資料的個數都比前一趟少乙個
- 第一趟要比較n個數,比較n-1次
演算法實現
下面用php**演示上述氣泡排序:
<?php
$a = array(9, 3, 5, 8, 2, 7);
echo
"排序前:";print_r($a);
$len = count($a); //陣列長度
for($i = 0; $i
< $len-1; ++$i)
}}echo
"排序後:";print_r($a);
?>
執行結果:
排序前:array ( [0] => 9 [1] => 3 [2] => 5 [3] => 8 [4] => 2 [5] => 7 )
排序後:array ( [0] => 2 [1] => 3 [2] => 5 [3] => 7 [4] => 8 [5] => 9 )
演算法(**)優化對於上面的**,假設第三輪排序後,就已經排出來正確的順序了,那麼第四和第五輪排序就沒有任何意義了。
對於上述情況,可以用乙個標記來記錄在一趟的比較過程中是否存在交換,如果不存在交換則整個陣列已經有序退出排序過程,反之則繼續進行下一趟的比較。
<?php
$a = array(9, 3, 5, 8, 2, 7);
echo
"排序前:";print_r($a);
$len = count($a);
for($i = 0; $i
< $len-1; ++$i)
}if($flag)
}echo
"排序後:";print_r($a);
?>
氣泡排序演算法 C 氣泡排序演算法排序詳解
氣泡排序是最簡單的排序方法,理解起來容易。雖然它的計算步驟比較多,不是最快的,但它是最基本的,初學者一定要掌握。c 氣泡排序演算法的例項源 一些排序方法的 集錦,該函式模板使用冒泡法對集合元素進行排序,引數說明 collection 集合物件,集合物件必須提供 操作。element 集合元素,該引數...
氣泡排序 氣泡排序演算法優化
常用的排序演算法主要包括 1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 簡單選擇排序 堆排序快速排序 4 歸併排序其中,氣泡排序算是最簡單的一種排序演算法 public class bubble int temp 0 for int i 0 iarr j 1 ...
排序演算法 氣泡排序
一.氣泡排序的過程 公升值排序 1.將第乙個記錄的關鍵字與第二個記錄的關鍵字進行比較,若key 1 key 2 則交換。然後比較第二個與第三個,依此類推,直到第n 1個與第n個比較為止,第一趟排序完後,記錄最大的關鍵字會被排在最後面。2.將記錄的前n 1個關鍵字進行第二趟比較交換,直到前n 1個中最...