淺談氣泡排序
在計算機演算法中,排序也是很重要的一塊兒。最為常見的有直接插入排序、氣泡排序、快速排序、簡單選擇排序、堆排序、基數排序等。今天就淺談一下氣泡排序。
首先,在排序中有兩個重要的複雜度。其一是時間複雜度,可以理解完成排序的工作量(一般按最大的工作量計算);另一個就是空間複雜度,既可以理解為在排序過程中佔記憶體的大小。
氣泡排序是通過相鄰的記錄兩兩比較和交換,是關鍵字小的記錄影水中的氣泡一樣,逐趟像上飄移;而關鍵字大的記錄好比石頭往下沉,每一趟有一塊兒“最大的石頭”沉到水底。
思路:先將第一個關鍵字和第二個關鍵字進行比較,若為逆序(即先著大),則交換兩個關鍵字的位置;然後比較第二個關鍵字和第三個關鍵字,若為逆序,又交換兩個關鍵字的位置..........如此下去,直至第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的平方)。
最後,向大家推薦一本書 《演算法(第四版)》
此書是 Robert Sedgewick的鉅作,是演算法領域的經典參考書,內容全面,與實際結合緊密,而且採用iava實現程式碼。它適合用做電腦科學進階教材,面向已經熟悉了計算機系統並掌握了基本程式設計技能的專業人員。本書也可用於自學,或是作為開發人員的參考手冊,因為書中實現了許多實用演算法並詳盡分析了它們的效能特點和用途。
它的獨特之處,詳細的講解了各種演算法和資料結構,以及相關的資訊。我們可以在熟悉的環境下除錯、實現它們,方便我們上手。演算法從簡單的棧、佇列等低階抽象的資料型別 到 複雜的排序、搜尋、圖和字串方面的演算法。
此書值得擁有!
相關文章
- 淺析氣泡排序排序
- 淺析氣泡排序-c++排序C++
- 排序——氣泡排序排序
- 深入淺出的排序演算法-氣泡排序排序演算法
- 氣泡排序排序
- 9. 氣泡排序,以及如何優化氣泡排序,氣泡排序屬於插入排序排序優化
- 排序:氣泡排序&快速排序排序
- js氣泡排序JS排序
- JavaScript氣泡排序JavaScript排序
- 氣泡排序1排序
- 氣泡排序-fusha排序
- 氣泡排序演示排序
- Shell氣泡排序排序
- d氣泡排序排序
- 容器氣泡排序排序
- 氣泡排序法排序
- 氣泡排序(Java)排序Java
- Python 氣泡排序Python排序
- 陣列氣泡排序陣列排序
- Python_氣泡排序Python排序
- 氣泡排序筆記排序筆記
- 氣泡排序(python版)排序Python
- 19_氣泡排序排序
- 函式氣泡排序函式排序
- 排序演算法--氣泡排序排序演算法
- 排序演算法__氣泡排序排序演算法
- 排序演算法–氣泡排序排序演算法
- 選擇排序和氣泡排序排序
- 氣泡排序與選擇排序排序
- 【排序】氣泡排序(待補充)排序
- 氣泡排序 插入排序 快排排序
- Python實現氣泡排序Python排序
- 如何優化氣泡排序?優化排序
- JAVA基礎--氣泡排序Java排序
- js氣泡排序動畫JS排序動畫
- Java實現氣泡排序Java排序
- C語言之氣泡排序C語言排序
- OJ題之氣泡排序排序
- 氣泡排序及優化排序優化