氣泡排序(bubble sort)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。
這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故名。
氣泡排序演算法的原理:(從後往前)
1、比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3、針對所有的元素重複以上的步驟,除了最後乙個。
4、持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
/*** 實驗題目:
* 實現氣泡排序演算法
* 實驗目的:
* 領會氣泡排序的過程和演算法設計
* 實驗內容:
* 設計程式,實現氣泡排序演算法。用相關資料進行測試,並
* 輸出各趟的排序結果。
*/#include
#define max_len (100) // 最大長度
typedef int key_type; // 定義關鍵字型別為int
typedef char info_type;
typedef struct
rec_type; // 查詢元素的型別
/*-----------------x和y交換------------------*/
void swap_rec(rec_type &x, rec_type &y) // 引用型別
/*-----------------建立順序表------------------*/
void create_list(rec_type recs, key_type keys, int n)
/*-----------------輸出順序表------------------*/
void disp_list(rec_type recs, int n)
/*-----------------以下運算針對堆排序的程式------------------*/
/*-----------------建立順序表------------------*/
void create_list1(rec_type recs, key_type keys, int n)
}/*-----------------輸出順序表------------------*/
void disp_list1(rec_type recs, int n)
printf("\n");
}#include
/*-----------------對recs[0...n-1]按遞增有序進行氣泡排序---------------------*/
static void bubble_sort(rec_type recs, int n)
}printf(" i = %d: 歸位元素%d, 排序結果: ", i, recs[i].key);
disp_list(recs, n);
if(!exchange) // 本趟沒有發生交換,中途結束演算法
return;}}
int main(int argc, char *ar**)
;rec_type recs[max_len];
create_list(recs, a, n);
printf("排序前: ");
disp_list(recs, n);
bubble_sort(recs, n);
printf("排序後: ");
disp_list(recs, n);
return 0;
}測試結果:
排序前: 6 8 7 9 0 1 3 2 4 5
i = 0: 歸位元素0, 排序結果: 0 6 8 7 9 1 2 3 4 5
i = 1: 歸位元素1, 排序結果: 0 1 6 8 7 9 2 3 4 5
i = 2: 歸位元素2, 排序結果: 0 1 2 6 8 7 9 3 4 5
i = 3: 歸位元素3, 排序結果: 0 1 2 3 6 8 7 9 4 5
i = 4: 歸位元素4, 排序結果: 0 1 2 3 4 6 8 7 9 5
i = 5: 歸位元素5, 排序結果: 0 1 2 3 4 5 6 8 7 9
i = 6: 歸位元素6, 排序結果: 0 1 2 3 4 5 6 7 8 9
i = 7: 歸位元素7, 排序結果: 0 1 2 3 4 5 6 7 8 9
排序後: 0 1 2 3 4 5 6 7 8 9
氣泡排序演算法實現
氣泡排序基本思想 將n個記錄看作按縱向排列,每趟排序時自下至上對每對相鄰記錄進行比較,若次序不符合要求 逆序 就交換。每趟排序結束時都能使排序範圍內關鍵字最小的記錄象乙個氣泡一樣公升到表上端的對應位置,整個排序過程共進行n 1趟,依次將關鍵字最小 次小 第三小 的各個記錄 冒到 表的第乙個 第二個 ...
氣泡排序演算法實現
氣泡排序,顧名思義就跟生活中的 冒泡 現象相似 大的泡泡被壓在下面就會自主地往上浮起。在陣列中,如果讓乙個無序的陣列有序 例如公升序 那麼在陣列左側的較大的數就應該自主地向右移動。因此,從左向右開始,依次與相鄰的 右側 數進行比較,如果arr i arr i 1 則交換二者位置,i就變為了i 1 即...
氣泡排序演算法實現
氣泡排序基本思想 將n個記錄看作按縱向排列,每趟排序時自下至上對每對相鄰記錄進行比較,若次序不符合要求 逆序 就交換。每趟排序結束時都能使排序範圍內關鍵字最小的記錄象乙個氣泡一樣公升到表上端的對應位置,整個排序過程共進行n 1趟,依次將關鍵字最小 次小 第三小 的各個記錄 冒到 表的第乙個 第二個 ...