排序演算法:氣泡排序
阿新 • • 發佈:2019-02-05
一、原理
對於長度為n的陣列,我們對陣列的前n,n-1,n-2,n-3,…,0個數組進行“冒泡”,即比較前一個數據與後一個數據的大小,若前者更大,交換位置。這樣一來,最大的資料便可以移到陣列的末位置。進行n-1次上述操作後,陣列排序即完成。
二、流程
(1)遍歷陣列至第n-1個數據,比較相鄰兩資料大小,若前者更大,交換二者位置;
(2)n–。
三、實現
#include <cstdio>
int main() {
int n;
scanf("%d", &n);
int data[n + 5];
int i;
for (i = 0; i < n; i++) {
scanf("%d", &data[i]);
}
int temp, end;
for(end = n - 1; end >= 0; end--) {
for(i = 0; i < end; i++) {
if(data[i] > data[i + 1]) { // 如果此處改成<,便可實現從大到小
temp = data[i + 1];
data[i + 1] = data[i];
data[i] = temp;
}
}
}
for (i = 0; i < n; i++) {
printf("%d ", data[i]);
}
return 0;
}
四、思考
對於n-1次遍歷操作,有一些部分有序的陣列事實上不需要那麼多次即可得到完全有序的陣列。如何判斷這種情況以節省時間?
參考:氣泡排序以及氣泡排序的優化 - onlycxue