C 二进制搜索以获取第一个整数的位置>;=搜索整数

C 二进制搜索以获取第一个整数的位置>;=搜索整数,c,binary-search,C,Binary Search,在排序数组中,我需要找到第一个整数>=给定整数的位置(如果数组中不存在这样的整数,则应返回-1)。以下对二进制搜索的修改是否正确,以解决此问题?我已经使用了相当多的测试用例来验证功能,但仍然想确认一下 n=数组中的元素数 ele=要搜索的整数 int binarySearch(int a[],int n,int ele) { int lower=0; int upper=n-1; int mid; int pos=-1; while(lower<=upper) {

在排序数组中,我需要找到第一个整数>=给定整数的位置(如果数组中不存在这样的整数,则应返回-1)。以下对二进制搜索的修改是否正确,以解决此问题?我已经使用了相当多的测试用例来验证功能,但仍然想确认一下

n=数组中的元素数

ele=要搜索的整数

int binarySearch(int a[],int n,int ele)
{
  int lower=0;
  int upper=n-1;

  int mid;
  int pos=-1;
  while(lower<=upper)
  {
    mid=(lower+upper)/2;
    if (a[mid]==ele)
    {
        while(mid>=0 && a[mid]==ele)
            mid--;
        return mid+1;
    }
    else if(a[mid]<ele)
        lower=mid+1;
    else
    {
        pos=mid;
        upper=mid-1;
    }
  }
  return pos;
}
intbinarysearch(inta[],intn,intele)
{
整数下限=0;
int上限=n-1;
int mid;
int pos=-1;
while(下限=0&&a[mid]==ele)
中--;
返回mid+1;
}

否则,如果(a[mid]您所写的不是二进制搜索;在最坏的情况下,它是线性搜索。 (考虑当数组包含所有相同元素时会发生什么情况)

信不信由你,只要编程正确,一个普通的二进制搜索将完全满足你的要求(找到大于或等于目标的最小整数)

我们可以用一些不变量来编程


  • 0您编写的不是二进制搜索;在最坏的情况下,它是线性搜索。
    (考虑当数组包含所有相同元素时会发生什么情况)

    信不信由你,只要编程正确,一个普通的二进制搜索将完全满足你的要求(找到大于或等于目标的最小整数)

    我们可以用一些不变量来编程


    • 0
      mid=(lower+upper)/2;
      ——这是。也就是说,它可能会导致整数溢出。请尝试
      mid=lower+(upper-lower)/2;
      对于记录,C具有一个现成的函数,名为,它实现了二进制搜索。第二个(嵌套的)while似乎是一个改进的目标。理想情况下是一个while()应该是可能的。我认为您的代码在其他方面是正确的。当我编写此代码时,它导致我在单个while循环中出现一些问题。
      mid=(下+上)/2;
      --这是。也就是说,它可能导致整数溢出。请尝试
      mid=lower+(上-下)/2、 
      对于记录,C提供了一个现成的函数,名为,它实现了二进制搜索。第二个(嵌套)while似乎是一个改进的目标。理想情况下,一个while()应该是可能的。我认为您的代码在其他方面是正确的。当我编写此代码时,它导致我出现了一些问题,无法实现一个while循环。
      int 
      binarySearch(int a[], int n, int x)
      {
          int lo = 0, hi = n;
      
          while(lo < hi)
          {
              int mid = lo + (hi - lo)/2;
      
              if(a[mid] < x) lo = mid + 1;
              else           hi = mid;
          }
      
          return hi;
      }
      
      return hi < n ? hi : -1;