线性查找法————折半查找
/*******************
线性查找法————折半查找
根据已经排好大小的学号进行折半查找
折半查找的基本思想:首先选取数组中间位置的元素,
将其与查找键进行比较,如果相等,则返回下标,找出值,否则,查找区间缩小为原来的一半,
**********************/
#include <stdio.h>
#define N 40
int ReadScore(int score[],long num[]) //录取id和成绩保存到数组score[]和num[]中
{
int i = -1;
do{
i++;
printf("输入学生ID:");
scanf("%ld",&num[i]);
printf("输入%ld的成绩:",num[i]);
scanf("%d",&score[i]);
}while(num[i] > 0 && score[i] >=0 ); //输入负值时结束
return i;
}
int BinSearch(long num[],long x,int n) //查找数值为X的数组元素,找到返回下标位置,否则返回-1
{
int low,high,mid;
low = 0; //区间左端下标为0
high = n - 1; //区间右端下标为n-1
while(low <= high) //左端小于等于右端
{
mid = (high + low)/2; //取中间点
if(x > num[mid])
{
low = mid + 1; //若x>num[mid],左端点+1
}else if(x < num[mid]){
high = mid - 1; //若x<num[mid],右端点+1
}else{
return mid; //找到值,返回小标
}
}
return -1;
}
int main()
{
int score[N],n,pos;
long num[N],x;
n = ReadScore(score,num); //录入id和学号,并返回总人数
printf("总计人数:%d\n",n);
printf("请输入要查找的ID:");
scanf("%ld",&x); //读取要查找的学号
pos = BinSearch(num,x,n); //查找学号的函数
if(pos != -1) //判断返回值下标
{
printf("此人分数:%d\n",score[pos]); //读取下标对应的分数
}else{
printf("没有你要查找的人\n");
}
return 0;
线性查找法————折半查找
根据已经排好大小的学号进行折半查找
折半查找的基本思想:首先选取数组中间位置的元素,
将其与查找键进行比较,如果相等,则返回下标,找出值,否则,查找区间缩小为原来的一半,
**********************/
#include <stdio.h>
#define N 40
int ReadScore(int score[],long num[]) //录取id和成绩保存到数组score[]和num[]中
{
int i = -1;
do{
i++;
printf("输入学生ID:");
scanf("%ld",&num[i]);
printf("输入%ld的成绩:",num[i]);
scanf("%d",&score[i]);
}while(num[i] > 0 && score[i] >=0 ); //输入负值时结束
return i;
}
int BinSearch(long num[],long x,int n) //查找数值为X的数组元素,找到返回下标位置,否则返回-1
{
int low,high,mid;
low = 0; //区间左端下标为0
high = n - 1; //区间右端下标为n-1
while(low <= high) //左端小于等于右端
{
mid = (high + low)/2; //取中间点
if(x > num[mid])
{
low = mid + 1; //若x>num[mid],左端点+1
}else if(x < num[mid]){
high = mid - 1; //若x<num[mid],右端点+1
}else{
return mid; //找到值,返回小标
}
}
return -1;
}
int main()
{
int score[N],n,pos;
long num[N],x;
n = ReadScore(score,num); //录入id和学号,并返回总人数
printf("总计人数:%d\n",n);
printf("请输入要查找的ID:");
scanf("%ld",&x); //读取要查找的学号
pos = BinSearch(num,x,n); //查找学号的函数
if(pos != -1) //判断返回值下标
{
printf("此人分数:%d\n",score[pos]); //读取下标对应的分数
}else{
printf("没有你要查找的人\n");
}
return 0;
}