二分法注记

基本二分查找

int main(void)
{
    int n, x;
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    sort(a, a+n);
    scanf("%d", &x);
    int l = 0, h = n-1;
    while(l <= h)
    {
         int mid = (l + h) / 2;
         if(a[mid] == x)
         {
             printf("find\n");
             return 0;
         }
         if(a[mid] > x)
         {
             h = mid - 1;
         }
         else
         {
             l = mid + 1;
         }
    }
    printf("not find\n");

    return 0;
} 

用二分法在数组中查找第一个大于等于x的数

int find1(int a[], int n, int x)  //二分查找需对已经有序的数列使用,数组a中的元素按升序排列
{
    int low = 0, high = n - 1;
    while (low <= high)
    {
        int mid = (low + high) / 2;
        if (a[mid] < x)  //x > a[mid]
        {
            low = mid + 1;
        }
        else
        {
            high = mid - 1;
        }
    }
    if (low == n)
    {
        printf("数组中的数均小于%d,不存在大于等于%d的数\n", x, x);
        return 0;
    }
    else
    {
        return a[low];  //为什么返回a[low],因为最终low下标一定比high下标大1,low是下标
    }
}
int find2(int a[], int n, int x)  //二分查找需对已经有序的数列使用,数组a中的元素按升序排列
{
    int low = 0, high = n - 1;
    while (low <= high)
    {
        int mid = (low + high) / 2;
        if (a[mid] < x)  //x > a[mid]
        {
            low = mid + 1;
        }
        else
        {
            high = mid - 1;
        }
    }
    if (high + 1 == n)
    {
        printf("数组中的数均小于%d,不存在大于等于%d的数\n", x, x);
        return 0;
    }
    else
    {
        return a[high + 1];  //返回a[high+1],high+1是下标
    }
}
全部评论

相关推荐

06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
06-18 15:03
门头沟学院 Java
至少实习看起来比去年好?问了下群里的同学和身边的同学,人均有offer。有的还有好几个大厂offer
菜鸟1973:上一年暑期也是人均大厂实习offer,结果秋招跟不招人一样,大部分都转正了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务