折半搜索:搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半
① 首先确定整个查找区间的中间位置 mid = (left + right)/2 。
② 用待查关键字值与中间位置的关键字值进行比较;若相等,则查找成功;若大于,则在后(右)半个区域继续进行折半查找;若小于,则在前(左)半个区域继续进行折半查找。
③ 对确定的缩小区域再按折半公式,重复上述步骤。最后,得到结果:要么查找成功, 要么查找失败。折半查找的存储结构采用一维数组存放
代码如下:
int main()
{
int arr[] = { 1,3,5,6,9,10,12,23,34,45 };
int low = 0;
int mid;
int high = sizeof(arr) / sizeof(arr[0]) - 1;
int key;
scanf("%d", &key);
while (low <= high)
{
mid = (low + high) / 2;
if (key == arr[mid])
{
printf("%d在%d下标", key, mid);
return 0;
}
else if (key > arr[mid])
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
printf("%d没有找到\n", key);
return 0;
}