冒泡排序- 维基百科,自由的百科全书
文章推薦指數: 80 %
冒泡排序(英語:Bubble Sort)又稱為泡式排序,是一種簡單的排序算法。
它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。
泡沫排序
語言
監視
編輯
此條目沒有列出任何參考或來源。
(2020年6月13日)維基百科所有的內容都應該可供查證。
請協助補充可靠來源以改善這篇條目。
無法查證的內容可能會因為異議提出而移除。
泡沫排序(英語:BubbleSort)又稱為泡式排序,是一種簡單的排序演算法。
它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。
走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。
這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
泡沫排序使用泡沫排序為一列數字進行排序的過程概況類別排序演算法資料結構數組複雜度平均時間複雜度
O
(
n
2
)
{\displaystyleO(n^{2})}
最壞時間複雜度
O
(
n
2
)
{\displaystyleO(n^{2})}
最佳時間複雜度
O
(
n
)
{\displaystyleO(n)}
空間複雜度總共
O
(
n
)
{\displaystyleO(n)}
,需要輔助空間
O
(
1
)
{\displaystyleO(1)}
最佳解No相關變數的定義泡沫排序
泡沫排序對
n
{\displaystylen}
個項目需要O(
n
2
{\displaystylen^{2}}
)的比較次數,且可以原地排序。
儘管這個演算法是最簡單瞭解和實作的排序演算法之一,但它對於包含大量的元素的數列排序是很沒有效率的。
泡沫排序是與插入排序擁有相等的漸近時間複雜度,但是兩種演算法在需要的交換次數卻很大地不同。
在最壞的情況,泡沫排序需要
O
(
n
2
)
{\displaystyleO(n^{2})}
次交換,而插入排序只要最多
O
(
n
)
{\displaystyleO(n)}
交換。
泡沫排序的實現(類似下面)通常會對已經排序好的數列拙劣地執行(
O
(
n
2
)
{\displaystyleO(n^{2})}
),而插入排序在這個例子只需要
O
(
n
)
{\displaystyleO(n)}
個運算。
因此很多現代的演算法教科書避免使用泡沫排序,而用插入排序取代之。
泡沫排序如果能在內部迴圈第一次執行時,使用一個旗標來表示有無需要交換的可能,也可以把最優情況下的複雜度降低到
O
(
n
)
{\displaystyleO(n)}
。
在這個情況,已經排序好的數列就無交換的需要。
若在每次走訪數列時,把走訪順序反過來,也可以稍微地改進效率。
有時候稱為雞尾酒排序,因為演算法會從數列的一端到另一端之間穿梭往返。
泡沫排序演算法的運作如下:
比較相鄰的元素。
如果第一個比第二個大,就交換它們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。
這步做完後,最後的元素會是最大的數。
針對所有的元素重複以上的步驟,除了最後一個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
由於它的簡潔,泡沫排序通常被用來對於程式設計入門的學生介紹演算法的概念。
目次
1虛擬碼
2助記碼
3實作範例
3.1C語言
3.2C++
3.3C#
3.4JAVA
3.5Ruby
3.6JavaScript
3.7Pascal
3.8Python
3.9VB.NET
3.10PHP
3.11Rust
3.12Go
3.13Objective-C
3.14Swift
3.15Shell
3.16IDL
4外部連結
虛擬碼編輯
functionbubble_sort(array,length){
vari,j;
for(ifrom0tolength-1){
for(jfrom0tolength-1-i){
if(array[j]>array[j+1])
swap(array[j],array[j+1])
}
}
}
函數泡沫排序輸入一個陣列名稱為array其長度為length
i從0到(length-1)
j從0到(length-1-i)
如果array[j]>array[j+1]
交換array[j]和array[j+1]的值
如果結束
j迴圈結束
i迴圈結束
函數結束
助記碼編輯
i∈[0,N-1)//循环N-1遍
j∈[0,N-1-i)//每遍循环要处理的无序部分
swap(j,j+1)//两两排序(升序/降序)
實作範例編輯
C語言編輯
#include
延伸文章資訊
- 1冒泡排序- 维基百科,自由的百科全书
冒泡排序(英語:Bubble Sort)又稱為泡式排序,是一種簡單的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。
- 2泡沫排序法(Bubble Sort) - HackMD
以升序泡沫排序法來說:將相鄰的元素兩兩比對,若左邊的數比右邊的數大,則將兩數交換,若沒有則換下一個元素對比,做完一輪之後序列中最大的數就會被排到最後一個 ...
- 3Java 泡沫排序法 - 翻轉工作室
所謂排序法(Sort)即是將一大堆資料,利用某一關鍵內容由最大到最小,或最小到最大依序排列。吾人可能會認為排序演算法應該不是很重要才對,如果僅排序 100 筆以下 ...
- 4Bubble Sort 泡泡排序法 - Cedric's 學習備忘錄- 痞客邦
泡泡排序法的原理是將一組數字中的第一位與後一位相比較,若後一位數字較大,則位置對調,再將第二位數與第三位數做比較,若後一數字較大, ...
- 5[C++] 氣泡排序法(Bubble sort)
氣泡排序的意思,wiki 裡面是這麼說明: 又稱為泡沫排序,是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序 ...