c++ - 高效的二分搜索
问题描述
在二分搜索的两种不同实现中,哪一种更有效,为什么?
一般来说,二分搜索将一个已排序的数组一分为二,用运算符 < 或 > 将目标条目与数组的两个分割部分进行比较,并不断迭代直到完成或找到目标条目。
int a[8] = {1, 3, 4, 5, 7, 8, 9, 11};
1.
while ( size > 1)
{
mid = low + (size/2);
if (a[mid] > find)
{
size = mid - low;
}
else
{
size = size - (mid - low);
low = mid;
}
}
2.
while (low <= size)
{
mid = (low + size)/2;
if (a[mid] < find)
{
low = mid + 1;
}
else if (a[mid] > find)
{
size = mid - 1;
}
else
{
break;
}
}
在搜索 6 时,第一个,迭代为,
mid = 4 size = 4 low = 0
mid = 2 size = 2 low = 2
mid = 3 size = 1 low = 3
5
而第二个则进行更多迭代并获取下一个条目。
mid = 4 size = 3 low = 0
mid = 1 size = 3 low = 2
mid = 2 size = 3 low = 3
mid = 3 size = 3 low = 4
7
哪一个是高效的?
解决方案
推荐阅读
- javascript - D3 - 堆积图表在条形顶部显示总值
- javascript - 如何在 ORDER BY 和限制之后动态添加查询参数
- mysql - tidb 的 set[sync-log=false] 有什么区别和影响
- python - WTForm 验证总是失败并且验证器不会生成错误消息
- android - 通过文件或表格将交换帐户添加到电话
- javascript - 如何刷新 Google Apps 脚本中的日期对象?
- c# - ExecuteScalar 返回错误值
- java - Android Firebase - 卡片未在 RecyclerView 和 NullPointerException 中显示
- php - 如何获取数组中的每个用户列表
- html - 让每个班级独一无二