氣泡排序法

2021-10-02 19:08:39 字數 2760 閱讀 4728

演算法原理

冒泡 排序 的 方法 為: 將被 排序 的 記錄 陣列 a[ 1... n] 垂直 排列, 每個 記錄 a[ i] 看作 重量 為 a[ i] 氣泡。 根據 輕 氣泡 不 能在 重 氣泡 之下 的 原則, 從下 往上 掃瞄 陣列 a: 凡 掃瞄 到 違反 本 原則 的 輕 氣泡, 就 使其 向上「 飄浮」。 如此 反覆 進行, 直到 最後 任何 兩個 氣泡 都是 輕者 在上、 重者 在下 為止。 冒泡 排序 是 穩定 的 排序。

下面 是 具體 的 演算法。

(1) 初始 狀態 下, a[ 1… n] 為 無序 區。

(2) 第一 趟 掃瞄: 從 無序 區 底部 向上 依次 比較 相鄰 的 兩個 氣泡 的 重量, 若 發現 輕者 在下、 重者 在上, 則 交換 二者 的 位置。 即 依次 比較( a[ n], a[ n- 1]),( a[ n- 1], a[ n- 2]),…,;( a[ 2], a[ 1]); 對於 每 對 氣泡( a[ j+ 1], a[ j]), 若 a[ j+ 1]< a[ j], 則 交換 a[ j+ 1] 和 a[ j] 的 內容。 第一 趟 掃瞄 完畢 時,「 最輕」 的 氣泡 就 飄浮 到 該區 間的 頂部, 即 關鍵字 最小 的 記錄 被 放在 最高 位置 a[ 1] 上。

(3) 第二 趟 掃瞄: 掃瞄 a[ 2… n]。 掃瞄 完畢 時,「 次 輕」 的 氣泡 飄浮 到 a[ 2] 的 位置 上。

(4) 第 i 趟 掃瞄: a[ 1... i- 1] 和 a[ i… n] 分別為 當前 的 有序 區 和 無序 區。 掃瞄 仍是 從 無序 區 底部 向上, 直至 該區 頂部。 掃瞄 完畢 時, 該區 中最 輕 氣泡 飄浮 到頂 部 位置 a[ i] 上, 結果是 a[ 1... i] 變為 新的 有序 區。 最後, 經過 n- 1 趟 掃瞄 可得到 有序 區 a[ 1... n]。

演算法筆記:

**實現

#include #include #define success		0

#define param_err -1

int bubblesort(int * array, int size)

int i = 0, j = 0;

int temp = 0;

int xch = 0;

#ifdef debug

int k = 0;

#endif

for(i = 0; i < size; i++)

}#ifdef debug

printf("[");

/*有序區域*/

for(k =0; k < i; k++)

printf("], ");

printf(" %d, ",array[i]);

/*無序區域*/

printf("[");

for(k =i+1; k < size; k++)

printf("]\n");

printf("\n");

#endif

/*無序區域完全沒有發生交換,說明已經完全排序好了,退出*/

if(1 != xch)

} return success; }

int main(int argc, char ** ar**);

int i = 0;

printf("before sort: \n");

for(i = 0; i < 10; i++)

printf("\n");

bubblesort(array, 10);

printf("after sort: \n");

for(i = 0; i < 10; i++)

printf("\n");

return 0;

}

除錯編譯

gcc bubblesort.c -ddebug

除錯輸出

before sort:

7 3 5 8 0 9 1 2 4 6

, 0, [ 7 5 8 3 9 1 2 4 6 ]

[ 0 ], 1, [ 7 8 5 9 3 2 4 6 ]

[ 0 1 ], 2, [ 8 7 9 5 3 4 6 ]

[ 0 1 2 ], 3, [ 8 9 7 5 4 6 ]

[ 0 1 2 3 ], 4, [ 9 8 7 5 6 ]

[ 0 1 2 3 4 ], 5, [ 9 8 7 6 ]

[ 0 1 2 3 4 5 ], 6, [ 9 8 7 ]

[ 0 1 2 3 4 5 6 ], 7, [ 9 8 ]

[ 0 1 2 3 4 5 6 7 ], 8, [ 9 ]

[ 0 1 2 3 4 5 6 7 8 ], 9,

after sort:

0 1 2 3 4 5 6 7 8 9

氣泡排序 氣泡排序法

冒泡法是一種簡單的排序方法,它的實現非常簡單。首先對n個專案進行掃瞄,比較相領兩個專案的大小,若發現違背大小次序則進行互換,由此可以使n個專案中的最大者換到最後。然後對剩下的未排序好的專案再進行掃瞄,使它們的最大者換到表的最後。以此類推,直到將表全部排序好為止。這種排序方法,每遍掃瞄以後,都縮短了待...

排序 氣泡排序法

氣泡排序法,是最簡單的一種排序方法,從第乙個位置開始與相鄰位置比較,判斷是否需要交換位子。第一趟從第乙個位置開始,直到最後乙個位置,a n 1 確定最大 以公升序為例子 的數放在最後一位,a n 1 第二趟,繼續從第乙個位置開始,倒數第二位,a n 2 確定倒數第二大的數在倒數第二位a n 2 演算...

氣泡排序法

從小到大排序 int myarray new int 取長度最長的片語 冒泡法 for int j 1 jfor int i 0 i 如果 myarray i myarray i 1 則 myarray i 上浮一位 if myarray i myarray i 1 從大到小排序 int myarr...