C++で実装する初等的ソートアルゴリズム2【バブルソート】
初等的ソートアルゴリズム第2弾。
今回はやたらと耳にすることが多いバブルソートです。
目標
バブルソートを理解する。実際に問題を解いてみます。
バブルソート
数列を昇順にソートします。計算量はです。
問題を解いてみる
Aizu Online Judge の問題を解いて実装をやってみます。言語はC++です。
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_2_A
#include<iostream> using namespace std; int main() { int i, N, tmp, change=0; int seq[100]; bool flag; // 交換すべき隣接要素が存在するか? cin >> N; for (i = 0; i < N; i++) cin >> seq[i]; // sort flag = 1; while (flag) { flag = 0; for (i = N-1; i > 0; i--) { if (seq[i] < seq[i-1]) { tmp = seq[i]; seq[i] = seq[i-1]; seq[i-1] = tmp; change++; flag = 1; } } } for (i = 0; i < N; i++) { if (i > 0) cout << " "; cout << seq[i]; } cout << endl; cout << change << endl; return 0; }
まとめ
バブルソートの問題を解きました。やっぱり実装してみると理解できるようになりますね。
参考
渡部有隆. プログラミングコンテスト攻略のためのアルゴリズムとデータ構造. Ozy, 秋葉拓哉協力. 株式会社マイナビ. 2015.