求10亿个整数中第5亿个数的C代码实现 谢谢

求10亿个整数中第5亿个数的C代码实现 多谢
有10亿个整数, 不重复, 不连续. (整数的范围按32位平台计算. 范围为0~2^32).
求: 这10亿个整数中, 值在中间的那个数 (即第5亿个大的那个数).

求C代码实现 多谢

------解决方案--------------------
这个用位组可以解决。
原理:
所有数据都不重复,一个int类型32bit,2的32次幂为42.94967296亿,大于10亿,如果用0,1来标志的话,0表示无此位置数据,1表示有此位置数据,如0101 0010,表示有2,5,7三个数。那么N个数只需要1+N/32 的int类型存储空间 ,对于此题,表示10亿个数据大概需要125MB的空间,即(1000000000/8=125000000)字节=125000kb=125Mb,内存上足可以承受。

实现:
我们只需要三个函数,清零、设置、测试,接下来就要明白清楚如何进行位操作了。
如何设置特定的位为1是最关键的,以下是实现代码。
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1f
#define N 10000000
int a[1+N/BITSPERWORD];

void set(int i)
{
  a[i>>SHIFT] |= (1<<(i&MASK));
}

void clear(int i)
{
  a[i>>SHIFT] &= ~(1<<(i&MASK));
}

int test(int i)
{
  return a[i>>SHIFT] & (1<<(i&MASK));
}

其中i>>SHIFT 相当于 i/32得到对应数组下标
   i&MASK相当于 i mod 32,得到应该设置在哪位
   1<<(i&MASK)相当于获得2的(i&MASK)次幂。 

只要找到第5亿个bit为1的那个位,求他的下标就知道中间值是多少了。