常見的排序演算法(一) 氣泡排序

2022-06-24 21:57:10 字數 2079 閱讀 9186

氣泡排序(英語:bubble sort)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

(**於維基百科)

簡單的氣泡排序演算法

第 1 輪比較,每次從陣列最前面往後面比較,較大的元素會往後面交換,一直比較到最後陣列最後一位,那麼陣列第 (n - 1) 位就是陣列裡最大的元素第 2 輪比較,一直比較到第 (n - 2) 位,n 是陣列長度,陣列裡面第 2 大的元素就會確定在陣列 (n - 2) 的位置;以此類推。這個過程就像水底裡的氣泡慢慢往上浮出水面,離水底越遠,水壓越小,氣泡上公升過程中變得越來越大。

1

//簡單的氣泡排序

2public

static

void bubblesorts1(int a, int

n) 14}15

}16 system.out.println("普通氣泡排序比較次數:" +count);

17 }

複雜度分析:每次迴圈從最低位最高位移動元素,每輪迴圈下來後,最大的數被挪到了最後面(已經確定這個元素在陣列裡是最大的)。**中使用了兩個 for 迴圈,時間複雜度為 o(n²);交換元素使用到乙個變數,因而空間複雜度為 o(1)。

氣泡排序的優化

當一輪迴圈的比較下來後,陣列中沒有發生元素的交換則說明這些需要排序的元素是符合排序順序的。如果一輪下來沒有發生任何元素交換,那麼繼續下一輪迴圈是沒有意義的,因為元素已經確定是排好序的,所以要停止演算法繼續比較。

優化的實現:

即使對陣列進行排序,上述函式也始終執行 o(n2) 時間。如果內部迴圈未引起任何交換,則可以通過停止演算法來對其進行優化。

1

//設有標示位的氣泡排序

2public

static

void bubblesorts2(int a, int

n) 17

}18 j--;//

每遍歷一輪,就把最大的數放在了陣列後面19}

20 system.out.println("帶標誌位的氣泡排序比較次數:" +count);

21 }

最壞情況和平均情況下的時間複雜度:o(n2),最壞的情況是對反向排好序的陣列進行排序。

最佳情況時間複雜度:o(n),最好情況是對排好序的陣列進行排序。

空間複雜度:o(1)

演算法穩定性:穩定。

(所謂穩定就是說相同的元素在其原先的相對位置不變,比如說兩個數字 1 和 1(就像每個人有身份證號),排好序後,前面那個 1 (人)依舊在後面那個 1(人)的前面。)

測試方法

1

public

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 錯誤就把他們交換過來。比較相鄰的元素。如果第乙個比第二個大 公升序 就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對...