資料結構 陣列(三) 氣泡排序

2021-09-11 06:37:03 字數 1329 閱讀 5539

在實際開發中,有很多場景需要我們將陣列元素按照從大到小(或者從小到大)的順序排列,這樣在查閱資料時會更加直觀,例如:

乙個儲存了班級學號的陣列,排序後更容易分割槽好學生和壞學生;

乙個儲存了商品單價的陣列,排序後更容易看出它們的價效比。

以從小到大排序為例,氣泡排序的整體思想是這樣的:

演算法思想:

·從陣列頭部開始,不斷比較相鄰的兩個元素的大小,讓較大的元素逐漸往後移動(交換兩個元素的值),直到陣列的末尾。

·經過第一輪的比較,就可以找到最大的元素,並將它移動到最後乙個位置。

·第一輪結束後,繼續第二輪。

·仍然從陣列頭部開始比較,讓較大的元素逐漸往後移動,直到陣列的倒數第二個元素為止。

·經過第二輪的比較,就可以找到次大的元素,並將它放到倒數第二個位置。

·以此類推,進行 n-1(n 為陣列長度)輪「冒泡」後,就可以將所有的元素都排列好。

整個排序過程就好像氣泡不斷從水裡冒出來最大的先出來,次大的第二出來,最小的最後出來,所以將這種排序方式稱為氣泡排序(bubble sort)。下

面我們以「3 2 4 1」為例對氣泡排序進行說明。

第一輪 排序過程3 2 4 1 (最初)2 3 4 2 (比較3和2,交換)2 3 4 1 (比較3和4,不交換)2 3 1 4 (比較4和1,交換)第一輪結束,最大的數字 4 已經在最後面,因此第二輪排序只需要對前面三個數進行比較。第二輪 排序過程2 3 1 4 (第一輪排序結果)2 3 1 4 (比較2和3,不交換)2 1 3 4 (比較3和1,交換)第二輪結束,次大的數字 3 已經排在倒數第二個位置,所以第三輪只需要比較前兩個元素。第三輪 排序過程2 1 3 4 (第二輪排序結果)1 2 3 4 (比較2和1,交換)至此,排序結束。

**:

#include int main();

int i, j, temp, issorted;

//優化演算法:最多進行 n-1 輪比較

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

}if(issorted) break; //如果沒有發生交換,說明剩下的元素已經排序好了

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

printf("\n");

return 0;

}

資料結構 氣泡排序

起泡排序的過程很簡單。首先將第乙個記錄的關鍵字和第二個記錄的關鍵字進行比較,若為逆序,則將兩個記錄交換之,然後比較第二個記錄和第三個記錄的關鍵字。依次類推,直至第n 1個記錄和第n個記錄的關鍵字進行比較為止。上述過程稱作第一趟起泡排序,其結果使得關鍵字最大的記錄被安置到最後乙個記錄的位置上。然後進行...

資料結構 氣泡排序

氣泡排序演算法的基本思想是 假設待排序表長為n,從後往前 或從前往後 兩兩比較相鄰元素的值,若為逆序 即a i 1 a i 則交換它們,直到序列比較完。我們稱它為一趟冒泡,如果將最小的元素交換到待排序序列的第乙個位置 關鍵字小的元素往上 漂浮 這就是氣泡排序名字的由來 下一趟冒泡時,前一趟確定的最小...

資料結構 氣泡排序

目標效果 原始碼 include void print out int a,int n void bubble sort int a,int n int main printf 起泡排序 n printf 排序前 n printresult a,10 排序方法 bubblesort a,10 pri...