淺談氣泡排序

HL_123發表於2013-07-24
  在計算機演算法中,排序也是很重要的一塊兒。最為常見的有直接插入排序、氣泡排序、快速排序、簡單選擇排序、堆排序、基數排序等。今天就淺談一下氣泡排序。
  首先,在排序中有兩個重要的複雜度。其一是時間複雜度,可以理解完成排序的工作量(一般按最大的工作量計算);另一個就是空間複雜度,既可以理解為在排序過程中佔記憶體的大小。
 氣泡排序是通過相鄰的記錄兩兩比較和交換,是關鍵字小的記錄影水中的氣泡一樣,逐趟像上飄移;而關鍵字大的記錄好比石頭往下沉,每一趟有一塊兒“最大的石頭”沉到水底。
  思路:先將第一個關鍵字和第二個關鍵字進行比較,若為逆序(即先著大),則交換兩個關鍵字的位置;然後比較第二個關鍵字和第三個關鍵字,若為逆序,又交換兩個關鍵字的位置..........如此下去,直至第n個關鍵字和第n-1個關鍵字比較完畢,則完成了一趟氣泡排序。此時,最大的數就排到最後了。然後進行第二趟排序,對前n-1個記錄進行類似的操作,結果會把前n-1個關鍵字中,最大的排到n-1的位置。以此,直到排完。
     從上面我們可以看出,如果有n個關鍵字,需要排n-1趟才能排完。      如果給定的數字已經排好了,這樣做就有點多餘了,所以在寫程式的時候,如果第一次冒泡,沒有交換位置的話,說明已經排好,後面的就不用比較了,原樣輸出即可。
  下面,我用四個數字舉一下例子。A={ 3  2  1  4  }
    第一趟   第一次比較     2   3  1  4   (交換2  3 )
             第二次比較     2   1  3  4   (交換1  3)
             第三次比較     2   1  3  4 (第一趟完成。4為最大的) 
   第二趟     第一次比較     1   2  3  4  (由於1<2,故不交換)
             第二次比較     1   2  3  4  (由於,2<3,故不交換)
   第三趟    第一次比較     1  2    3   4   (由於1<2,故不交換)

從以上,我們可以得出,當給定序列中記錄已經排好序的話,只需一趟冒泡,即只需要n-1次比較,移動的係數為0。如果給定序列正好逆序的話,需要n-1趟冒泡,最大的比較次數為n(n-1)/2,約為n^2/2,所以時間複雜度為O(n的平方)。

最後,向大家推薦一本書 《演算法(第四版)》 enter image description here

     此書是 Robert Sedgewick的鉅作,是演算法領域的經典參考書,內容全面,與實際結合緊密,而且採用iava實現程式碼。它適合用做電腦科學進階教材,面向已經熟悉了計算機系統並掌握了基本程式設計技能的專業人員。本書也可用於自學,或是作為開發人員的參考手冊,因為書中實現了許多實用演算法並詳盡分析了它們的效能特點和用途。
   它的獨特之處,詳細的講解了各種演算法和資料結構,以及相關的資訊。我們可以在熟悉的環境下除錯、實現它們,方便我們上手。演算法從簡單的棧、佇列等低階抽象的資料型別 到 複雜的排序、搜尋、圖和字串方面的演算法。
  此書值得擁有!

相關文章