二分法查找

二分查找:

即每次用比较区域中间的数值和要查找的数值作比较。
用函数调用,程序更加简洁,可移植性增强。
令查找这个函数模块返回一个数字来判断查找结果,更加灵活清晰!

int search( int arr[], int key, int left,int  right)  //二分查找的函数
{
	while (left <= right)
	{
		int mid = left + (right - left)/2;
		if (key < arr[mid])
			right = mid - 1;
		else if (key > arr[mid])
			left = mid + 1;
		else
		
			return mid;
	
	}
	return -1;
}


int main()
{
	int arr[] = { 0,2,3,5,7,9,12,34,55,56,88}; int key = 34;
	int left = 0;
	int right = sizeof(arr) / sizeof(arr[0]) - 1;
	int ret = search (arr,key,left,right);
	if (ret == -1)
		printf("查找不到!");
	else
		printf("找到了!它的数组下标为%d\n",ret);
	system("pause");
	return 0;
	
}

结果如图:
在这里插入图片描述

二分查找最坏情况下要比较 log2(n),n为数组个数。
相比顺序查找比较n次更提高了代码的效率。
二分查找和顺序查找都属于静态查找。

你可能感兴趣的:(C语言啊,数据结构)