折半查找

二分查找又称折半查找

优点:比较次数少,查找速度快,平均性能好;

缺点:要求待查表为有序表,且插入删除困难。

因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

#include<stdio.h>
#include<stdlib.h>

int search(int arr[], int len, int key)
{
	int left = 0;
	int right = len - 1;
	int mid = (left + right) / 2;
	if (key <= right&&key >= left)//输入值在查找范围内开始查找
	{
		while (left <= right)
		{
			if (arr[mid] > key)
			{
				right = mid - 1;
				mid = (left + right) / 2;
			}
			else if (arr[mid] < key)
			{
				left = mid + 1;
				mid = (left + right) / 2;
			}
			else
			{
				printf("查找成功:arr[%d]", mid);
				return mid;

			}
		}
	}
	if (key > right || key < left)
	{
		printf("查找失败");
	}
}
int main()
{
	int i;
	int arr[10];
	int len = sizeof(arr) / sizeof(arr[0]);
	int key = 0;
	int mid = 0;
	for (i = 0; i < len; i++)
	{
		arr[i] = i;
	}
	printf("请输入要查找的数\n");
	scanf("%d", &key);
	search(arr, len, key);//调用查找函数

	system("pause");
	return 0;
}