二分法找目标元素

二分法的核心思想:
1.定义left和right分别指向数组的最左边和最右边的位置。
2.定义mid指向中间的数据。
3.将目标数据和mid指向的数据进行比较:大于则left指向mid+1的位置,小于则right指向mid-1的位置。
几个注意的问题:
1.循环终止条件:当 left > right 时,表示搜索区间为空,元素不存在。
自己在进行编写的过程中:循环条件 size%2 提供的循环条件会导致二分查找无法正常工作,可能提前终止、陷入无限循环或返回错误结果。建议使用标准的 while (left <= right) 循环条件,并通过 left 和 right 直接控制搜索区间,而不是依赖 size 的奇偶性。
点击查看代码
Position BinarySearch(ArrPtr array, ElemSet x)
{
int left = 0;
int right = array->size - 1;
while (left <= right) {
int middle = left + (right - left) / 2; // 防止整数溢出
if (x > array->data[middle]) {
left = middle + 1;
} else if (x < array->data[middle]) {
right = middle - 1;
} else {
return middle; // 找到目标元素,返回位置
}
}
return NotFound; // 未找到目标元素
}
浙公网安备 33010602011771号