C语言折半查找法:有序数组中数,找到返回下标,找不到返回-1

#include <stdio.h>

//定义一个函数,输入参数有三个,第一个是数组内容,第二个是需要查找的数,第三个是数组长度

int search(int arr[], int x, int length)
{
	int left = 0;
	int right = length - 1;
//while 循环,当左边的数小于右边的数时,一直查找,直至二者相等,循环结束
	while (left <= right)
	{
//避免左边+右边的值溢出
		int mid = left + (right - left) / 2;   
//如果中间的数小于要查找的数,那么中间和它左边的数就都不是,中间的数成为下一次最左边的数
		if (arr[mid] < x) 
		{
			left = mid + 1; 
		}
//如果中间的数大于要查找的数,那么中间和它右边的数就都不是,中间的数成为下一次最右边的数
		else if(arr[mid]>x)
		{
		    right = mid - 1;
		}
//如果中间的值 刚好是要查找的值,直接返回中间值
		else
		{
			return mid;
        }
	}
//while循环结束后,如果还没查找到,返回一个-1
	return -1;
}

int main()

{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int x = 4;
	int length = sizeof(arr) / sizeof(arr[0]);
//调用函数部分
	int xiabiao = search(arr, x, length);  
//判断下标返回值大小
	if (xiabiao == -1)
	{
		printf("未找到该数字\n");
	}
	else
	{
		printf("%d的下标是:%d\n",x, xiabiao);
	}
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43220266/article/details/82954746