500W名学生参加高考,最高分是700分,如何选出排名前40%?
这是一道面试题,下面给出我的解法。没有验证,很可能存在错误,: -)
假设500W名考生的分数保存在一个数组scores[]中,我们把排名在前40%的考生的信息,放在数组array[]中
typedef struct
{
char name[20];
int score;
} Info;
void func(Info scores[], Info array[],long n=5000000)
{
int b[701];
int i=0;
for(i=0; i<701; i++)
{
b[i]=0;
}
for(i=0; i<n; i++) // 得到分数位0,1,...,的学生的个数
{
b[scores[i].score]++;
}
long num=b[700];
i=700;
while(num<2000000) // 得到第2000000名考生的分数i
{
num+=b[--i];
}
int k=0;
for(int j=0; j<5000000; j++)
{
if(scores[j].score>=i)
{
array[k++]=scores[j];
}
}
}