二分查找-C语言
#include"stdio.h"
#define MAXSIZE 100
#define KEYTYPE int
typedef struct
{
KEYTYPE key;
}SSELEMENT;
typedef struct
{
SSELEMENT r[MAXSIZE];
int len;
}SSTABLE;
int search_bin(KEYTYPE k, SSTABLE st)
{ //二分查找函数
int low,high,mid;
low=1;
high=st.len;
while(low<=high)
{
mid=(low+high)/2;
if(k==st.r[mid].key)
return mid;
else if(k<st.r[mid].key)
high=mid-1;
else
low=mid+1;
}
return 0;
}
main()
{
SSTABLE st;
KEYTYPE x;
int n,i;
st.len =0;
printf("请输入查找表的长度:\n");
scanf("%d",&n);
if(n>0)
{
printf("请按升序输入%d个数据\n",n);//建立有序查找表
printf("请输入第%i个数据:",1);
scanf("%d",&st.r[1]);
i=2;
while(i<=n)
{
printf("请输入第%i个数据:",i);
scanf("%d",&x);
if(x>=st.r[i-1].key) //保证升序
{
st.r[i].key=x;
i++;
}
else
{
printf("请按升序输入数据\n");
continue;
}
}
st.len=n;
printf("待查找的有序表为:\n");
for(i=1;i<=st.len;i++)
printf("%5d",st.r[i].key);
printf("\n请输入要查找的关键字:\n");
scanf("%d",&x);
if(search_bin(x,st)>0) //在st中查找x
printf("%d在查找表第%d个位置上\n",x,search_bin(x,st));
else
printf("%d不在查找表中\n",x);
}
else
printf("查找表长度不能小于或等于0\n");
}
关注下面这个关注号,了解更多信息。
头顶渐突终不悔,代码道出我的爱。