遍历一维数组的效率例子
2010-07-31
下面的程序,输入学生的成绩查询其学号。首先将输入的数字与数组的各元素匹配,若匹配的话,该数组元素的索引就是该学生的学号。然后就可以将这个数组元素输出。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int score[10]={76,85,90,67,59,79,82,95,91,65};
int num;
int grade;
int i;
num=-1;
printf("用学生成绩查询学号");
printf("请输入学生成绩(0到100)。==> ");
scanf("%d",&grade);
for(i=0;i<10;i++)
{
if(score[i]==grade)
{
num=i;
break;
}
}
if(num != -1)
{
printf("学生学号是:%d\n",num);
}
else
{
printf("没有此成绩的学生\n");
}
system("PAUSE");
return 0;
}
很明显,最坏的情况,什么也查不到,但整个数组遍历了。
下面使用指针来实现。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int score[10]={76,85,90,67,59,79,82,95,91,65};
int pointer[101];
int index;
int grade;
int i;
/*第一部分:创建指针数组*/
for(i=0; i<=101; i++)
{
pointer[i] = -1;
}
for(i=0; i<10; i++)
{
index=score[i];
pointer[index]=i;
}
/*第二部分:查询学生学号*/
while(1)
{
printf("请输入学生成绩(0到100).==>");
scanf("%d",&grade);
if(grade != -1)
{
index = pointer[grade];
if(index != -1)
{
printf("学生学号是:%d\n",index);
}
else
{
printf("没有此成绩的学生\n");
}
}
else
{
exit(1);
}
}
system("PAUSE");
return 0;
}
除了第一次查询要创建pointer数组外,以后每次查询都可以固定时间内找到。当然,此程序的前提是,每个成绩只出现一次。
