拉格朗日二分查找

中=头+(尾 - 头) * 1.0 * (num - arr[头] ) / arr[尾] - arr[头] ;

void search2(int a[N], int num)
{
	int  tou = 0;
	int wei = N - 1;

	int zhong;
	int flag = -1;//代表找不到
	int ci = 0;
	while (tou <= wei)//循环
	{

		//zhong = (tou + wei) / 2;//取中间值
		// zhong = tou + (wei-tou) / 2;
		// zhong = tou + (wei-tou) * 1/2;
		//tou +0.5wei-0.5tou= (tou + wei) / 2
		//zhong = tou + (wei - tou) * 1 / 2;

		zhong = tou + (wei - tou) *1.0* (num - a[tou]) / (a[wei] - a[tou]);


		printf("\n%d,%d,%d,%d", tou, wei, zhong, ++ci);

		if (num == a[zhong])
		{
			printf("找到,a[%d]=%d", zhong, num);
			flag = 1;
			break;
		}
		else if (num > a[zhong])
		{
			tou = zhong + 1;

		}
		else
		{

			wei = zhong - 1;
		}



	}

	if (flag == -1)
	{
		printf("没有找到");
	}
}



void main()
{
	int a[N];
	for (int i = 0; i < N; i++)
	{
		a[i] = i;
		printf("%d  ", i);
	}
	int num;
	scanf("%d", &num);

	search2(a, num);//调用函数查找
	system("pause");

}
posted @ 2016-11-09 19:58  呉语伦比  阅读(146)  评论(0编辑  收藏  举报