【C语言学习】二分法查找有序数组中的数

二分查找的基本原理
二分查找的基本逻辑就是每次找区间的中间数,然后与要查找的数进行比较,不断的缩小区间,最后区间中只剩一个数,即为要查找的数。如果不是,则没有该数。
二分查找只适用于有序数组

以数组中的数从左至右按从小到大依次排列为例
最左端为a[0],最右端为a[len-1],中间数为(left+right)/2,中间数取整数时取大的或小的皆可,此处取小的那个(例如13/2,可取6或7,此处取6)
【C语言学习】二分法查找有序数组中的数_第1张图片
代码

#include
int search(int k,int a[], int len)
{
	int left = 0;
	int right = len-1;
	int ret = -1;//当下标为-1时查找失败 
	while(left <= right)//当左端大于右端时查找失败 
	{
		int mid = (left+right)/2;
		if(a[mid] == k )
		{
			ret = mid;//查找成功时的数组下标 
			break;
		}else if(a[mid]>k)
		{
			right = mid - 1;
		}else{
			left = mid +1;
		}
	}
	return ret;
}

int main()
{
	int a[]={2,4,7,11,13,16,21,24,27,32,36,40,46};
	int k;
	printf("请输入要查找的数字:");
	scanf("%d",&k);
	int len = sizeof(a)/sizeof(a[0]);//求数组长度 
	int ret = search(k, a, len);
	if(ret>-1)
	{
		printf("找到数字%d\n数组下标为%d", k,ret);
	 } else
	 {
	 	printf("没有找到数字%d\n",k);
	 }
	return 0;
}

运行结果
【C语言学习】二分法查找有序数组中的数_第2张图片
【C语言学习】二分法查找有序数组中的数_第3张图片

你可能感兴趣的:(C语言程序,C语言学习,c语言,学习,开发语言)