とある数列の中央値<メディアン>

投稿日 : 2009年12月27日 16:04

 あおいろ日記の方に「median 日記」でぐぐって来られる方がちらほらいるので、これなら五分でかけそーとちょりっと書いてみました。

#書いてたPCにBoostが入ってなくてばっちり五分以上かかりました。

 コレクションをソートしちゃうのでソート出来ないときは別の方法で何とかしてください。

 適当に書いたら楽した分なんか色々インクルードすることになってしまいました。

#include <vector> // vector
#include <cstdlib> // srand, rand
#include <ctime> // time
#include <iostream> // cout
#include <algorithm> // for_each
#include <boost/lambda/lambda.hpp> // lambda

using namespace std;
using namespace boost::lambda;

#define ELEMENTS 10

int main(int argc, char* argv[])
{
	vector<int> v(ELEMENTS);

	// 準備
	srand(time(NULL));
	cout << "source: ";
	for_each(v.begin(), v.end(), (_1 = rand(), cout << _1 << ", "));
	cout << endl;

	// medianを取る
	sort(v.begin(), v.end()); // ソートして
	vector<int>::size_type pivot = v.size() / 2;
	int median = (pivot % 2)? v[pivot]: (v[pivot] + v[pivot + 1]) / 2;// 真ん中の値をとる

	cout << "median: " << median << endl;

	return 0;
}


フィードバック

# medianの求め方をお求めの方へ

2009/12/27 16:21 by あおいろ日記
あおいろ日記@わんくま同盟に一例を書いてみました。 for_eachに関数こさえて渡すのがめんどくさくなってlambdaとか使ってますがそこは適当にあれをそうしてください。...

# re: とある数列の中央値<メディアン>

2009/12/27 19:52 by επιστημη
ユー VC++10使っちゃいなYO!

for_each(v.begin(), v.end(), [](int& x) { cout << (x=rand()) << ", ";});
コメントの入力
タイトル
 
名前
 
Url
コメント