题目
/*题目内容:折半查找 给定查找表如下: #define M 20 typedef int Etype; typedef struct { Etype r[M+1]; int len; }SeqList; 输入若干数据(少于20个且递增有序)和要查找的数据进行折半查找,输出查找成功或不成功比较的次数。 输入描述 在第一行输入若正数,输入-1时结束,在第二行输入要查找的数据 输出描述 查找成功输出比较次数,不成功时也输出比较的次数 输入样例 1 2 3 4 5 6 -1 3 输出样例 1 */
#include<stdio.h>
#define M 20
typedef int Etype;
typedef struct{
Etype r[M+1];
int len;
}SeqList;
void CreatList(SeqList *L)
{
int i=1,data;
L->len=0;
printf("输入一组有序的整数,以-1结尾:\n");
scanf("%d",&data);
while(data!=-1)
{
L->r[i]=data;
i++;
L->len++;
scanf("%d",&data);
}
}
int Search(SeqList *L, int dt)
{
int low,high,mid,count=0;
low=1;
high=L->len ;
while(high>=low)
{
mid=(high+low)/2;
if(L->r[mid]==dt)
{
count++;
break;
}
else if(L->r [mid]>dt)
{
high=mid-1;
count++;
}
else
{
low=mid+1;
count++;
}
}
return count;
}
int main()
{
SeqList L;
int dt,count;
CreatList(&L);
printf("输入要查找的数:\n");
scanf("%d",&dt);
count=Search(&L,dt);
printf("查找比较次数为:%d\n",count);
return 0;
}