演算法01 - 氣泡排序
阿新 • • 發佈:2020-09-06
升入初中……然後報名CSP-J
開始訓練演算法。
今天還是回到C++吧。
氣泡排序我覺的是演算法中最基礎的。所以我才記得住……
MinGW版本的:
#include <bits/stdc++.h> using namespace std; int main() { int sums; cin >> sums; int before[sums + 1], after[sums + 1]; memset(after, 0, sizeof(after)); for(int i = 1; i <= sums; i ++) { cin >> before[i]; after[i] = before[i]; } for(int i = 1; i <= sums - 1; i ++) { for(int j = i; j <= sums; j ++) { if(after[i] > after[j]) { int temp = after[i]; after[i] = after[j]; after[j] = temp; } } } for(int i = 1; i <= sums; i ++) { cout << after[i] << ' '; } cout << endl; return 0; }
嗯……逐步分析下。
程式碼寫得比較保守,因此保留了before
。
第一句:
#include <bits/stdc++.h>
using namespace std;
萬能庫,不用說吧。。。
然後:
int sums;
cin >> sums;
int before[sums + 1], after[sums + 1];
memset(after, 0, sizeof(after));
首先輸入有多少的數,輸入下。
for(int i = 1; i <= sums; i ++) { cin >> before[i]; after[i] = before[i]; }
逐個輸入陣列內資料。
然後是雙重排序:
for(int i = 1; i <= sums - 1; i ++) {
for(int j = i; j <= sums; j ++) {
if(after[i] > after[j]) {
int temp = after[i];
after[i] = after[j];
after[j] = temp;
}
}
}
冒泡就是這樣,如果不行,交換下,因此時間複雜度還是穩定的,是\(O(n^2)\)
for(int i = 1; i <= sums; i ++) { cout << after[i] << ' '; } cout << endl; return 0;
一個個輸出,最後換行。