顺序查找
int read(int score[],long xuehao[]);
int chazhao(long xuehao[],long x,int n);//查找的类型是int型
main()
{
int score[N],n,pos;
long xuehao[N],x;
n=read(score,xuehao);
printf("Input ID to search:");
scanf("%ld",&x);
pos=chazhao(xuehao,x,n);
if(pos!=-1)
{
printf("score=%d\n",score[pos]);
}else{
printf("erro");
}
}
int read(int score[],long xuehao[])
{
int i=-1;
do
{
i++;
printf("Input ID and score:");
scanf("%ld%d",&xuehao[i],&score[i]);
}while(xuehao[i]>0&&score[i]>0);
return i;
}
int chazhao(long xuehao[],long x,int n)
{
int i;
for(i=0;i<n;i++)
{
if(xuehao[i]==x)
return i;
}
return -1;
}
顺序查找是用X与所有数据进行比较,当数据很多的时候就会非常慢,这时拆半查找就很快
拆半查找
拆半查找必须要先对数据进行升序或者降序排列
#include <stdio.h>
#define N 40
int read(long xuehao[],int score[]);
int chazhao(long xuehao[],long x,int n);
main()
{
int score[N],n,pos;
long xuehao[N],x;
n=read(xuehao,score);
printf("Input ID to search:");
scanf("%ld",&x);
pos=chazhao(xuehao,x,n);
if(pos!=-1)
printf("score=%d\n",score[pos]);
else
printf("erro\n");
}
int read(long xuehao[],int score[])
{
int i=-1;
do
{
i++;
printf("Input ID and score:");
scanf("%ld%d",&xuehao[i],&score[i]);
}while(score[i]>0&&xuehao[i]>0);
return i;
}
int chazhao(long xuehao[],long x,int n)
{
int low=0,high=n-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(x<xuehao[mid])
high=mid-1;
else if(x>xuehao[mid])
low=mid+1;
else
return mid;
}
return -1;
}