美文网首页
【tip】二分法寻找第一个大于(或者等于)目标值接口实现

【tip】二分法寻找第一个大于(或者等于)目标值接口实现

作者: papi_k的小茅屋 | 来源:发表于2024-01-16 10:06 被阅读0次
// arr可以使用qsort方法升序排序
int Cmp(const void *a, const void *b)
{
    return *(int *)a - *(int *)b;
}

1.二分法返回第一个大于目标的值

int BinarySearch1(int *arr, int length, int value)
{
    int left = 0;
    int right = length;
    while (left < right) {
        int mid = left + (right - left) / 2;
        if (arr[mid] <= value) {
            left = mid + 1;
        } else {
            right = mid;
        }
    }
    return left;
}

2.二分法返回第一个大于或等于目标的值

int BinarySearch2(int *arr, int length, int value)
{
    int left = 0;
    int right = length;
    while (left < right) {
        int mid = left + (right - left) / 2;
        if (arr[mid] < value) { // 注意这里,相比上边少了一个“=”号
            left = mid + 1;
        } else {
            right = mid;
        }
    }
    return left;
}

yo peace!

相关文章

网友评论

      本文标题:【tip】二分法寻找第一个大于(或者等于)目标值接口实现

      本文链接:https://www.haomeiwen.com/subject/xnfhodtx.html