二分查找

二分查找-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");

}

关注下面这个关注号,了解更多信息。

头顶渐突终不悔,代码道出我的爱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值