1. 程式人生 > >資料結構和演算法 | 氣泡排序演算法原理及實現和優化

資料結構和演算法 | 氣泡排序演算法原理及實現和優化

氣泡排序(Bubble Sort)是排序演算法裡面比較簡單的一個排序。它重複地走訪要排序的數列,一次比較兩個資料元素,如果順序不對則進行交換,並一直重複這樣的走訪操作,直到沒有要交換的資料元素為止。

氣泡排序的原理

為了更深入地理解氣泡排序的操作步驟,我們現在看一下氣泡排序的原理。

首先我們肯定有一個數組,裡面存放著待排序的元素列表,我們如果需要把比較大的元素排在前面,把小的元素排在後面,那麼需要從尾到頭開始下面的比較操作:

  1. 從尾部開始比較相鄰的兩個元素,如果尾部的元素比前面的大,就交換兩個元素的位置;
  2. 往前對每個相鄰的元素都做這樣的比較、交換操作,這樣到陣列頭部時,第 1 個元素會成為最大的元素;
  3. 重新從尾部開始第 1、2 步的操作,除了在這之前頭部已經排好的元素;
  4. 繼續對越來越少的資料進行比較、交換操作,直到沒有可比較的資料為止,排序完成。

注意,看完了這裡的操作步驟,我們可以想一下,如果從頭到尾進行操作是否可以?當然不可以,不過這樣可以完成從小到大的排序。

假如我們要把 12、35、99、18、76 這 5 個數從大到小進行排序,那麼數越大,越需要把它放在前面。氣泡排序的思想就是在每次遍歷一遍未排序的數列之後,將一個數據元素浮上去(也就是排好了一個數據)。

我們從後開始遍歷,首先比較 18 和 76,發現 76 比 18 大,就把兩個數交換順序,得到 12、35、99、76、18;接著比較 76 和 99,發現 76 比 99 小,所以不用交換順序;接著比較 99 和 35,發現 99 比 35 大,交換順序;接著比較 99 和 12,發現 99 比 12 大,交換順序。最終第 1 趟排序的結果變成了 99、12、35、76、18,排序的過程如圖 1 所示。

![圖 1 第 1 趟氣泡排序的過程示例](https://img-blog.csdn.net/20181022093649327?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdXBlaWZlbmczNTE0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)