1. 程式人生 > 實用技巧 >演算法01 - 氣泡排序

演算法01 - 氣泡排序

升入初中……然後報名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;

一個個輸出,最後換行。