二分法找目标元素

image
二分法的核心思想:
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;  // 未找到目标元素
}
posted @ 2025-07-09 20:36  Lè_Sage  阅读(26)  评论(0)    收藏  举报