資訊學奧賽系列教程:氣泡排序
阿新 • • 發佈:2018-11-30
排序:
按照從小到大,或者從大到小的順序,將雜亂無章的資料進行整理的過程,叫排序,排序一般在一維陣列中進行。
生活中排序的例子:上體育課的時候,老師把一排同學按身高進行排序。 考試後,老師按分數從高到低對同學的成績排名次。
氣泡排序原理和實現步驟:
方法:從前到後依次掃描陣列元素,掃描一次稱為一趟。
規則:每趟掃描時,陣列元素前一個和後一個相比較,如果次序和要求的次序不符合,則將兩個元素交換。
將5,3,4,1,6,2進行排序,第一趟比較如下圖:
排序過程中每趟的排序步驟如下圖所示:
氣泡排序程式碼實現:
#include <iostream> using namespace std; const int MAXN=10001; int main() { int n,i,j; float temp,a[MAXN]; cout<<"請輸入排序個數:"<<endl; cin>>n; for (i=0;i<n;i++) { cout<<"請輸入第"<<i+1<<"個數:"<<endl; cin>>a[i]; } for (i=n-1;i>0;i--) { for (j=0;j<i;j++) { if (a[j]>a[j+1]) { swap(a[j],a[j+1]);//比較交換 } } } for (i=0;i<n;i++) //輸出 { cout<<a[i]<<" "; } return 0; }
氣泡排序總結:
氣泡排序,只涉及前後兩個數的比較大小和兩個數交換,所以是穩定的排序。
如果待排序的元素已經排好,只需要一趟掃描就完成,時間複雜度為O(n)
最壞的情況下,需要進行n-1趟排序,並且每次需要交換前後兩個元素,時間複雜度為O()