氣泡排序(英語:bubble sort)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
(**於維基百科)
簡單的氣泡排序演算法
第 1 輪比較,每次從陣列最前面往後面比較,較大的元素會往後面交換,一直比較到最後陣列最後一位,那麼陣列第 (n - 1) 位就是陣列裡最大的元素;第 2 輪比較,一直比較到第 (n - 2) 位,n 是陣列長度,陣列裡面第 2 大的元素就會確定在陣列 (n - 2) 的位置;以此類推。這個過程就像水底裡的氣泡慢慢往上浮出水面,離水底越遠,水壓越小,氣泡上公升過程中變得越來越大。
1複雜度分析:每次迴圈從最低位往最高位移動元素,每輪迴圈下來後,最大的數被挪到了最後面(已經確定這個元素在陣列裡是最大的)。**中使用了兩個 for 迴圈,時間複雜度為 o(n²);交換元素使用到乙個變數,因而空間複雜度為 o(1)。//簡單的氣泡排序
2public
static
void bubblesorts1(int a, int
n) 14}15
}16 system.out.println("普通氣泡排序比較次數:" +count);
17 }
氣泡排序的優化
當一輪迴圈的比較下來後,陣列中沒有發生元素的交換,則說明這些需要排序的元素是符合排序順序的。如果一輪下來沒有發生任何元素交換,那麼繼續下一輪迴圈是沒有意義的,因為元素已經確定是排好序的,所以要停止演算法繼續比較。
優化的實現:
即使對陣列進行排序,上述函式也始終執行 o(n2) 時間。如果內部迴圈未引起任何交換,則可以通過停止演算法來對其進行優化。
1最壞情況和平均情況下的時間複雜度:o(n2),最壞的情況是對反向排好序的陣列進行排序。//設有標示位的氣泡排序
2public
static
void bubblesorts2(int a, int
n) 17
}18 j--;//
每遍歷一輪,就把最大的數放在了陣列後面19}
20 system.out.println("帶標誌位的氣泡排序比較次數:" +count);
21 }
最佳情況時間複雜度:o(n),最好情況是對排好序的陣列進行排序。
空間複雜度:o(1)
演算法穩定性:穩定。
(所謂穩定就是說相同的元素在其原先的相對位置不變,比如說兩個數字 1 和 1(就像每個人有身份證號),排好序後,前面那個 1 (人)依舊在後面那個 1(人)的前面。)
測試方法
1public
static
void
main(string args) ;
3int arr1 = ;
4bubblesort.bubblesorts2(arr1, arr1.length);56
for (int
i : arr1)
9 }
常見排序演算法 氣泡排序 快速排序
常見排序演算法 選擇排序 直接選擇排序 堆排序 交換排序 氣泡排序 快速排序 插入排序 直接插入排序 折半插入排序 shell排序 歸併排序 桶式排序 基數排序 輸入 input 有0個或多個輸入資料,這些輸入必須有清楚的描述和定義 輸出 output 至少有1個或多個輸出結果,不可以沒有輸出結果 ...
常見排序演算法之氣泡排序
1 首先,從第乙個元素開始,比較該元素與該元素相鄰的下乙個元素的大小 即第乙個元素與第二個元素的大小 如果該元素比較大則交換位置,否則不交換位置。2 按照1的步驟不斷重複的比較下一元素與其相鄰元素之間的大小,直到第n 1個元素,第一趟比較結束。例如 接下去是第二個元素,重複 1 的步驟,比較其與其相...
常見排序演算法之氣泡排序
氣泡排序 bubble sort 是一種較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序 如從小到大 首字母從a到z 錯誤就把他們交換過來。比較相鄰的元素。如果第乙個比第二個大 公升序 就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對...