C++でバブルソート
30分プログラム、その726。C++でバブルソートを書いてみました。C++を使うのは久しぶりです。
久しぶりすぎてほとんど書けませんでした。ホントは、マージソートを書きたかったんですが、結局バブルソートになりました。あと、最初はイテレータを使って書いてたんですが、結局あきらめました。
あと、Boostを始めて使ったんですが、これすごいですね。
v += 1,2,3;
とか
for_each(v.begin(),v.end(), std::cout << _1 << '\n');
とか書けるんですもん。すごいですよね。
ソースコード
#include <iostream> #include <algorithm> #include <vector> #include <boost/function.hpp> #include <boost/lambda/lambda.hpp> #include <boost/swap.hpp> #include <boost/assign.hpp> using namespace std; // functionは関数の型 // http://www.kmonos.net/alang/boost/classes/function.html void bsort(vector<int>& v, boost::function<bool (int,int)> f) { int size = v.size(); for(int i = 0; i < size; i++){ for(int j = 1; j < size - i; j++){ if(f(v[j],v[j-1])){ // スワップ // http://www.kmonos.net/alang/boost/classes/swap.html boost::swap(v[j],v[j-1]); } } } } int main(int argc, char *argv[]) { using namespace boost::lambda; using namespace boost::assign; vector<int> v; // コンテナへの要素の追加 // http://www.kmonos.net/alang/boost/classes/assign.html v += 1,10,12,0; // 無名関数 // http://www.kmonos.net/alang/boost/classes/lambda.html bsort(v, _1 > _2); // ホントはstd::sortを使ったほうがラク // sort(v.begin(),v.end(), _1 > _2); for_each(v.begin(),v.end(), std::cout << _1 << '\n'); return 0; }