折半查找算法又称二分查找,适用于有序数列,每次取中间数
例如 :在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
实现思想:
1.首先和中间元素去比较
2.如果小于中间元素,查找数组的左半部分
3.如果大于中间元素,查找函数的右半部分
4.每次取查找范围内查找,逐渐缩小范围
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int binary_search(int arr[], int key, int left, int right)
{
while (left <= right)
{
int mid = left + (right - left) / 2;
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int k = 7;
int ret = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
ret = binary_search(arr, k, left, right);
if (-1 == ret)
{
printf("找不到\n");
}
else
{
printf("找到了:%d\n", ret);
}
system("pause");
return 0;
}
之前我博客中写过的模拟猜数字游戏,便是采用折半查找算法来猜数字,可以提高效率。
本文深入解析了折半查找算法,即二分查找,适用于有序数列的高效搜索方法。通过示例代码详细展示了算法的实现过程,包括如何通过不断缩小查找范围来定位目标元素,以及如何在未找到目标时返回特定值。
6302

被折叠的 条评论
为什么被折叠?



