氣泡排序是一種簡單的排序演算法,它也是一種穩定排序演算法。其實現原理是重複掃瞄待排序序列,並比較每一對相鄰的元素,當該對元素順序不正確時進行交換。一直重複這個過程,直到沒有任何兩個相鄰元素可以交換,就表明完成了排序。
一般情況下,稱某個排序演算法穩定,指的是當待排序序列中有相同的元素時,它們的相對位置在排序前後不會發生改變。
假設待排序序列為 (5,1,4,2,8),如果採用氣泡排序對其進行公升序(由小到大)排序,則整個排序過程如下所示:
1) 第一輪排序,此時整個序列中的元素都位於待排序序列,依次掃瞄每對相鄰的元素,並對順序不正確的元素對交換位置,整個過程如圖 1 所示。
圖 1 第一輪排序(白色字型表示參與比較的一對相鄰元素)
從圖 1 可以看到,經過第一輪氣泡排序,從待排序序列中找出了最大數 8,並將其放到了待排序序列的尾部,併入已排序序列中。
2) 第二輪排序,此時待排序序列只包含前 4 個元素,依次掃瞄每對相鄰元素,對順序不正確的元素對交換位置,整個過程如圖 2 所示。
圖 2 第二輪排序
可以看到,經過第二輪氣泡排序,從待排序序列中找出了最大數 5,並將其放到了待排序序列的尾部,併入已排序序列中。
3) 第三輪排序,此時待排序序列包含前 3 個元素,依次掃瞄每對相鄰元素,對順序不正確的元素對交換位置,整個過程如圖 3 所示。
圖 3 第三輪排序
經過本輪氣泡排序,從待排序序列中找出了最大數 4,並將其放到了待排序序列的尾部,併入已排序序列中。
4) 第四輪排序,此時待排序序列包含前 2 個元素,對其進行氣泡排序的整個過程如圖 4 所示。
圖 4 第四輪排序
經過本輪氣泡排序,從待排序序列中找出了最大數 2,並將其放到了待排序序列的尾部,併入已排序序列中。
5) 當進行第五輪氣泡排序時,由於待排序序列中僅剩 1 個元素,無論再進行相鄰元素的比較,因此直接將其併入已排序序列中,此時的序列就認定為已排序好的序列(如圖 5 所示)。
圖 5 氣泡排序好的序列
氣泡排序的實現**為(c 語言):
#include
//交換 a 和 b 的位置的函式
#define n 5
int a[n] = ;
void swap(int *a, int *b);
//這是帶輸出的氣泡排序實現函式,從輸出結果可以分析冒泡的具體實現流程
void bubsort_test();
//這是不帶輸出的氣泡排序實現函式,通過此函式,可直接對陣列 a 中元素進行排序
void bubsort_pro();
int main()
bubsort_test();
return 0;
void swap(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
//這是帶輸出的氣泡排序實現函式,從輸出結果,可以看到冒泡的具體實現流程
void bubsort_test() {
for (int i = 0; i < n; i++) {
//對待排序序列進行氣泡排序
for (int j = 0; j + 1 < n - i; j++) {
//相鄰元素進行比較,當順序不正確時,交換位置
if (a[j] > a[j + 1]) {
swap(&a[j], &a[j + 1]);
//輸出本輪氣泡排序之後的序列
printf("第%d輪氣泡排序:", i + 1);
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
printf("\n");
//這是不帶輸出的氣泡排序實現函式,通過此函式,可直接對陣列 a 中元素進行排序
void bubsort_pro() {
for (int i = 0; i < n; i++) {
//對待排序序列進行氣泡排序
for (int j = 0; j + 1 < n - i; j++) {
//相鄰元素進行比較,當順序不正確時,交換位置
if (a[j] > a[j + 1]) {
swap(&a[j], &a[j + 1]);
執行結果為:
第1輪氣泡排序:1 4 2 5 8
第2輪氣泡排序:1 2 4 5 8
第3輪氣泡排序:1 2 4 5 8
第4輪氣泡排序:1 2 4 5 8
第5輪氣泡排序:1 2 4 5 8
通過分析氣泡排序的實現**可以得知,該演算法的最差時間複雜度為o(n2),最優時間複雜度為o(n),平均時間複雜度為 o(n2)。
氣泡排序 氣泡排序演算法優化
常用的排序演算法主要包括 1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 簡單選擇排序 堆排序快速排序 4 歸併排序其中,氣泡排序算是最簡單的一種排序演算法 public class bubble int temp 0 for int i 0 iarr j 1 ...
氣泡排序演算法 C 氣泡排序演算法排序詳解
氣泡排序是最簡單的排序方法,理解起來容易。雖然它的計算步驟比較多,不是最快的,但它是最基本的,初學者一定要掌握。c 氣泡排序演算法的例項源 一些排序方法的 集錦,該函式模板使用冒泡法對集合元素進行排序,引數說明 collection 集合物件,集合物件必須提供 操作。element 集合元素,該引數...
氣泡排序演算法
氣泡排序演算法策略 重複的交換相鄰的兩個反序元素。氣泡排序演算法步驟 取值 去陣列沒有進行排序的最後乙個數 對比 將選取從最近往前對比 交換 當對比的數比自己大時 從小到大排序 進行交換值。偽 如下 bubblesort a 1 for i 1 to length a 2 do for j leng...