C 二进制搜索以获取第一个整数的位置>;=搜索整数
在排序数组中,我需要找到第一个整数>=给定整数的位置(如果数组中不存在这样的整数,则应返回-1)。以下对二进制搜索的修改是否正确,以解决此问题?我已经使用了相当多的测试用例来验证功能,但仍然想确认一下 n=数组中的元素数 ele=要搜索的整数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) {
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您编写的不是二进制搜索;在最坏的情况下,它是线性搜索。
(考虑当数组包含所有相同元素时会发生什么情况)
信不信由你,只要编程正确,一个普通的二进制搜索将完全满足你的要求(找到大于或等于目标的最小整数)
我们可以用一些不变量来编程
0mid=(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;