第十三周
折半算法
#include <stdio.h>
#include <stdlib.h>
#define listsize 20
typedef int keytype;
typedef struct
{
keytype key;
}recordtype;
typedef struct
{
recordtype r[listsize+1];
int length;
}recordlist;
void Bininput(recordlist *l)
{
int i=1;
printf("请输入数组内容(0截止):\n");
scanf("%d",&(l->r[i].key));
while (l->r[i].key!=0)
{
i++;
scanf("%d",&(l->r[i].key));
}
l->length=i+1;
}
int Binsrch(recordlist l , keytype k)
{
int low=1;
int high=l.length;
while(low<=high)
{
int mid=(low+high)/2;
if(k==l.r[mid].key)
return (mid);
else if (k<l.r[mid].key)
high=mid-1;
else
low =mid+1;
}
return (0);
}
int main()
{
int k ;
recordlist l;
Bininput(&l);
printf("\n请输入要查找的数:");
fflush(stdin);
scanf("%d",&k);
if(Binsrch(l,k)==0)
printf("查无此数");
else
printf("要查找的数%d的位置是:%d\n",k,Binsrch(l,k));
return 0;
}
浙公网安备 33010602011771号