
c++二分查找
计算中间点 比较目标值 当 中间点计算方式:使用 条件判断优化:可以将较小的判断放在前面,以减少比较次数。 数据类型选择: 注释清晰:代码注释简洁明了,便于理解算法思路。
发布日期:2021-05-10 10:39:33
浏览次数:24
分类:精选文章
本文共 1021 字,大约阅读时间需要 3 分钟。
C++实现二分查找的代码解析与优化
在编程实践中,二分查找是一种高效的查找算法,广泛应用于有序数据的快速搜索。以下是C++实现二分查找的代码,并对其进行详细解析。
代码概述
int searchInsert(vector &nums, int target) { /*从小到大排序,进行二分查找*/ int head = 0, tail = nums.size() - 1; while (tail >= head) { if (target < nums[(tail + head) / 2]) tail = (tail + head) / 2 - 1; else if (target > nums[(tail + head) / 2]) head = (tail + head) / 2 + 1; else return (tail + head) / 2; } return -1;}
算法思路二分查找是一种分而治之的算法,通过将问题规模不断缩小,从而实现对目标值的快速定位。在本代码中,数组的两端指针分别记为head
和tail
,初始时head
设为0,tail
设为数组的最后一个元素的索引。
算法步骤
mid
,即(head + tail) / 2
。target
与nums[mid]
: - 如果
target
小于nums[mid]
,则可能在head
到mid-1
之间,设置tail = mid - 1
。 - 如果
target
大于nums[mid]
,则可能在mid+1
到tail
之间,设置head = mid + 1
。 - 如果
target
等于nums[mid]
,则返回mid
索引。
head
大于等于tail
时,若未找到目标值,返回-1。优化建议
(head + tail) / 2
,这在整数范围内可以避免中间值为小数的情况。nums
参数使用引用&nums
,以便在函数外修改数组。实际应用中,可以根据具体需求对数组排序方式和查找目标进行调整。本代码适用于已排序数组的情况,能够快速找到目标值的位置,具有较高的时间复杂度效率。