/*有序表上的查找(二分查找法)*/
#include<stdio.h>
#define Maxsize 10
typedef int KeyType;
typedef struct
{
int elem[Maxsize];
int n; /*最后一个数据元素的下标*/
}SqTable;
void Create(SqTable *st)
{
int i;
printf("输入一个含有9个数据元素的有序表:");
for(i=1;i<=9;i++)
scanf("%d",&st->elem[i]);
st->n=i;
}
int Search(SqTable *st,KeyType key)
{
int low,high,mid;
low=1; /*置查找区间初值*/
high=st->n;
while(low<=high)
{ /*区间长度不为0时继续查找*/
mid=(low+high)/2; /*对区间进行折半*/
if(key==st->elem[mid])
return mid;
else if(key<st->elem[mid])
high=mid-1; /*在前半区间查找*/
else low=mid+1; /*在后半区间查找*/
}
return 0; /*查找不成功,则返回0*/
}
main()
{
int key,x;
SqTable st;
Create(&st);
printf("输入查找的key值:");
scanf("%d",&key);
x=Search(&st,key);
if(x==0)
printf("查找失败!\n");
else
printf("%d,%d\n",x,st.elem[x]);
}
编译效果