用C语言写出二分法实现数的查找

在使用C语言函数数组进行二分查找时,首先难倒我们的是参数到底该定义几个。我们不妨进行一遍手工过程。首先要明白二分法的算法思想
什么是二分法?
(1)确定该区间的中间位置K(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。
因此在用二分法解决问题时,中间数成为了非常关键的入手点。但是计算机怎么确定这个中间数呢?如果知道这个数组的元素个数,直接除以2不就得到了吗?不用担心小数问题,因为元素个数是整型,除数2也是整型,C语言编译器会直接截取结果的整数部分。同时C语言提供sizeof运算符
sizeof(数组名称/数组元素类型) = 数组元素个数。
下面是用二分法去查找整型数组中元素的代码

#define _CRT_SECURE_NO_WARNINGS 1

#include
#include

int  binary_search(int arr[],int k,int left, int right)
{
	int mid = left + (right - left) / 2;
	while (left <= right)
	{
		if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else if (arr[mid] < k)
		{
			left = left - 1;
		}
		else  if(arr[mid] == k)
		{
			return mid;
		}
	}	
	return -1;
}
int main()
{
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	int length = sizeof(arr) / sizeof(arr[0]);
	int num;
	printf("请输入你要查找的数");
	scanf("%d", &num);
	int ret = binary_search(arr, num, 0, length-1);
	if (ret == -1)
	{
		printf("没找到该数,你输入的数有误");
	}
	else
	{
		printf("你输入的数是的第%d个数",ret);
	}
	system("pause");
	return 0;
}

你可能感兴趣的:(C语言)