c++実装「四分位数」アルゴリズム2
2150 ワード
// PE3-2-2--
// :2012-12-19 10:22:34
// PE3-2-- 2:
// n :
// Q2 n (Median);
// 1. n , Q2 ,
// (n-1)/2 ,Q1 (n-1)/2 ,Q3 (n-1)/2 ;
// 2. n , Q2 ,
// (n-2)/2 ,Q1 (n-2)/2 ,Q3 (n-2)/2
#include
#include
#include
using std::cin; using std::endl;
using std::cout; using std::vector;
using std::sort;
int main()
{
cout << " :" << endl;
vector intsets;
short x;
while (cin >> x)
{
intsets.push_back(x);
}
//
typedef vector::size_type vec_sz;
vec_sz size = intsets.size();
//
if (size <= 3)
{
cout << " 3, "
" 3, !!" << endl;
return 1;
}
//
sort(intsets.begin(), intsets.end());
//
vec_sz mid, mid1, mid3;
double median, median1, median3;
mid = size / 2;
//
median = size % 2 == 0 ? (intsets[mid] + intsets[mid-1]) / 2.0
: intsets[mid];
mid1 = size % 2 == 0 ? (mid-1)/2 : mid/2;
mid3 = mid+mid1+1;
if (size%2 != 0 )
{ //
median1 = mid % 2 == 0 ? (intsets[mid1] + intsets[mid1-1]) / 2.0
: intsets[mid1];
median3 = mid % 2 == 0 ? (intsets[mid3] + intsets[mid3-1]) / 2.0
: intsets[mid3];
}
else
{ //
median1 = (mid-1) % 2 == 0 ? (intsets[mid1] + intsets[mid1-1]) / 2.0
: intsets[mid1];
median3 = (mid-1) % 2 == 0 ? (intsets[mid3] + intsets[mid3-1]) / 2.0
: intsets[mid3];
}
cout << "median1 = " << median1 << endl;
cout << "median2 = " << median << endl;
cout << "median3 = " << median3 << endl;
return 0;
}