二分法查找适用于数据量较大时,但是数据需要先排好顺序。
首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤1的操作。
如果某一步数组为空,则表示找不到目标元素。
时间复杂度为:O(log2n)。
当所给数组为无序数组时,想用二分法查找某元素则需要先进行排序,在进行二分法查找。
#include<stdio.h>
#include<math.h>
int binary_search(int arr[], int k, int sz)
{
int left = 0;
int right = sz - 1;
int mid = 0;
while (left <= right)
{
mid = left + (right - left) / 2;
if (arr[mid] == k)
return mid;
else if (arr[mid] > k)
right = mid - 1;
else
left = mid + 1;
}
return -1;
}
int main()
{
int key;
scanf("%d", &key);
int arr[10] = { 1, 3, 5, 6, 7, 9, 10, 13, 16, 88 };
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = binary_search(arr, key, sz);
if (ret == -1)
printf("找不到\n");
else
printf("找到了:%d\n", ret + 1);
return 0;
}