C语言--折半查找(二分查找)算法

时间:2022-04-30 14:43:05

·什么是折半查找

·当我们在一堆有序数组中间查找一个数的时候,先将中间的数与查找数进行比较。如果中间数大于我们要查找的数,则在中间左半边进行查找;同样的,如果中间数小于我们要查找的数,则在中间往右半边再次进行查找。重复以上的过程,直到满足,如果不满足,则查找失败。

·条件:元素必须按照大小有序排列。

·图示

·那我们实现的思路是什么呢?我们定义三个变量,分别指向这个数组的最左边以及最右边还有中间,将中间的数与查找数进行比较。根据情况缩减范围,即改变左边或者右边变量的值,再次进行比较。过程如下图所示:

C语言--折半查找(二分查找)算法

·函数实现

int find(int arr[], int a, int left, int right)
{
	while(left<=right)
	{
		int mid = left+(right-left)/2;
		if(arr[mid] == a)
		{
			return mid;
		}
		else if(arr[mid]>a)
		{
			right = mid-1;
		}
		else
		{
			left = mid+1;
		}
	}
	return -1;
}

·当缩减范围的时候并不是把mid的值赋给left或者right,因为mid已经比较过了,所以我们把mid进行--或者++处理。

·我们函数返回的int值即为所要查找的数在数组中的位置