氣泡排序演算法

2021-07-23 08:26:59 字數 2172 閱讀 9106

在實際中,氣泡排序的使用還是極少的,面試中可能會問到。它適合資料量級很小的情況,其演算法的效率比較低,但是作為入門的排序演算法,還是值得學習的。

氣泡排序的基本思想就是不斷比較相鄰的兩個數,讓較大的元素不斷地往後移。經過一輪比較,就選出最大的數;經過第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個中最...