二分查找-函数实现

写一个二分查找函数

功能:在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回-1.

int bin_search(int arr[], int left, int right, int key)
// arr 是查找的数组
//left 数组的左下标
//right 数组的右下标
//key 要查找的数字

分析:因为是升序数组,采用二分查找所以只需要和中间middle比较

1.arr[middle]>key,说明key查找值在(arr[left],arr[middle])区间内,将区间缩小令,right=middle;

2.arr[middle][arr[middle+1],arr[right])区间内,将区间缩小,left=middle+1;

3.arr[middle]=key,说明key查找值=middle,返回中间值给result;

#include
int bin_search(int arr[], int left, int right, int key)
{
	int result = -1;
	while (left <= right)
	{
		int middle = (left + right) / 2;
		if (arr[middle] > key)
		{
			right = middle;
		}
		else if (arr[middle] < key)
		{
			left = middle + 1;
		}
		else
		{
			result = middle;
			break;
		}
	}
	if (-1 != result)
	{
		printf("所找下标为:%d\n", result);
	}
	else
	{
		printf("未查找到对应下标:%d\n", result);
	}
}
int main()
{
	int key=9;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int right = sizeof(arr) / sizeof(arr[0]) - 1;
	int left = 0;
	//printf("请输入要查找下标的数字:");
	//scanf("%d\n", &key);
	bin_search(arr, left, right, key);

}

二分查找-函数实现_第1张图片

你可能感兴趣的:(C语言刷题日记,c#)