二分查找(Binary Search)是一种在有序数组中查找特定元素的高效算法。它通过不断将搜索范围减半来查找目标元素。其时间复杂度为 O(log n),这是因为每一步都将搜索范围减半,因此算法的性能非常高。
二分查找的基本思想是:
- 初始化: 在开始时,确定搜索范围的起始位置 left 和结束位置 right。
- 计算中点: 在每一次迭代中,计算搜索范围的中点
mid
。 - 比较: 比较中点
mid
处的元素与目标元素target
。- 如果
mid
处的元素等于target
,则找到了目标元素,返回mid
。 - 如果
mid
处的元素小于target
,则目标元素在mid
右侧,更新 left。 - 如果
mid
处的元素大于target
,则目标元素在mid
左侧,更新 right。
- 如果
- 继续搜索: 重复上述步骤,直到 left超过 right或找到目标元素。
‘
Dome
#include <stdio.h>int find(int arr[], int size, int userVo)
{int left = 0;int right = size - 1;while (left <= right){int mid = (right + left) / 2;if (userVo == arr[mid]){return mid;/* code */}else if (userVo <= arr[mid]){/* code */right = mid - 1;}else{left = mid + 1;/* code */};};
};int main()
{int arr[] = {1,2,3,4,5,7,8,9};int size = sizeof(arr) / 4;int userVo = 3;int index = find(arr, size, userVo);printf("%d", index);return 0;
}