/* ソートしないアルゴリズム */


/* upper を超えない最大の値を返す */
int find_max(int *data, int count, int upper)
{
int i,max;

max = data[0];
for (i=1; i<count; i++)
if ( max < data[i] && data[i] <= upper)
max = data[i];
return max;
}


/* lower を下回らない最小の値を返す */
int find_min(int *data, int count, int lower)
{
int i,min;

min = data[0];
for (i=1; i<count; i++)
if ( min > data[i] && data[i] >= lower)
min = data[i];
return min;
}


int find_median(int *data, int count)
{
int i, upper, lower;

upper = MAX_INT;
lower = -MAX_INT;
while ( upper > lower ){
upper = find_max(data, count, upper);
lower = find_min(data, count, lower);
}

if ( upper == lower )
return upper;
else
return ???;
}