C语言:二分法查找某个数字在有序数组中的位置

//二分法查找某个数字在有序数组中的位置
#include 
int main()
{
	int arr[] = { 1,3,4,5,6,7,8,9,23,45,67 };
	int sz = sizeof(arr) / sizeof(arr[0]);//数组长度
	int n = 45;//要查找的数
	int i;
	int left = 0;
	int right = sizeof(arr);
	while( left <= right)
	{
		i = (left + right) / 2;
		if (arr[i] < n)
		{
			left = i+1;
		}
		else if (arr[i] > n)
		{
			right = i-1;
		}
		else if (arr[i] = n)
		{
			printf("%d在arr[%d]", n, i);
			break;
		}
	}
	if (left > right)
	{
		printf("查无此数\n");
	}
	return 0;
}

使用创建函数的方式:

  • 注意数组的长度的求取需要提前在函数外求取,以为实际传入函数中的数组为数组第一个元素的地址,即为指针,如果用公式 size=sizeof(arr)/sizeof(arr[0])
    的方式,则sizeof(arr)实际为arr[0]所在地址的长度,为4.
//C语言:创建函数求数组中的数在数组中的位置
//创建求位置的函数
int search_location(int arr[],int size,int num)
{  //注意此处传递进来的为数组的指针,所以求其长度应函数外提前完成。
	int right = size - 1;
	int left = 0;
	int middle=(left+right)/2;
	for(;left<=right;middle=(left+right)/2)
	{//等号不能丢,否则左右指向同一个数而其又是所找的数的时候,则不能进入循环,找不到。
		if (num > arr[middle])
		{
			left = middle+1;
		}
		else if (num <arr[ middle])
		{
			right = middle-1;
		}
		else if (num = arr[middle])
		{
			return middle;
		}
	}
	return -1;
}
//创建主函数
#include 
int main()
{
	int arr[] = { 1, 2, 3, 4, 56, 100, 667, 3444, 3566, 3777, 4567, 5678, 6789, 7890 };
	int size=sizeof(arr)/sizeof(arr[0]);
	int num = 111;
	int location;
	location=search_location(arr, size, num);
	if (location == -1)
	{
		printf("没有找到");
	}
	else
	{
		printf("%d在数组中的位置是arr[%d]\n", num, location);
	}
	return 0;
}

你可能感兴趣的:(C语言学习—代码之路,二分法,c语言)