二分查找法 与 拉格朗日插值查找法

二分查找法:
#define M 1024
void search(int a[M], int num)
{
	int tou = 0;
	int wei = M - 1;
	int zhong;
	int flag = -1;
	int  ci = 0;
	while (tou <= wei)
	{
		ci++;
		zhong = (tou + wei) / 2;
		printf("%d   %d   %d   %d\n", tou, wei, zhong, ci);
		if (num == a[zhong])
		{
			printf("一共查找%d次    找到:a[%d]=%d\n", ci, zhong, num);
			flag = 1;//找到
			break;
		}
		else if (num > a[zhong])
		{
			tou = zhong + 1;
		}
		else
		{
			wei = zhong - 1;
		}
	}
	if (-1 == flag)
	{
		printf("没有找到\n");
	}
}
//二分查找  前提数据 必须有序
void main()
{
	int a[M];
	for (size_t i = 0; i < M; i++)
	{
		a[i] = i;
		printf("%d    ", i);
	}
	printf("\n请输入要查找的数据:");
	int num;
	scanf("%d", &num);
	search(a, num);
	system("pause");
}
<img src="https://img-blog.csdn.net/20150801071450680?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="https://img-blog.csdn.net/20150801071353704?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
-------------------------------------------
拉格朗日插值查找法:
<pre name="code" class="cpp">void search2(int a[M], int num)
{
	int tou = 0;
	int wei = M - 1;
	int zhong;
	int flag = -1;//一开始找不到
	int  ci = 0;
	while (tou <= wei)
	{
		ci++;
		//zhong =tou+ ( wei-tou) / 2;
		zhong = tou + (wei - tou) *1.0*(num - a[tou]) / (a[wei] - a[tou]);
		printf("%d   %d   %d   %d\n", tou, wei, zhong, ci);
		if (num == a[zhong])
		{
			printf("一共查找%d次    找到:a[%d]=%d\n", ci, zhong, num);
			flag = 1;//找到
			break;
		}
		else if (num > a[zhong])
		{
			tou = zhong + 1;
		}
		else
		{
			wei = zhong - 1;
		}
	}
	if (-1 == flag)
	{
		printf("没有找到\n");
	}
}
//二分查找 拉格朗日插值查找
void main()
{
	int a[M];
	for (size_t i = 0; i < M; i++)
	{
		a[i] = i;
		printf("%d    ", i);
	}
	printf("\n请输入要查找的数据:");
	int num;
	scanf("%d", &num);
	search2(a, num);
	system("pause");
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值