是不是可以利用二分查找查询不连续区域的数字
是否可以利用二分查找查询不连续区域的数字
区域集不是连续的数字,而是有一段间隔的数字集合,如
int a[] = {0-50,80-111,150-200...},类似这样的集合,然后对这种情况是否可以使用二分查找来查找某个数字
我自己写的程序
[code = C/C++]
bool binaryFind(int id,int left,int right)
{
int mid = (left+right)/2;
int num = gArray[mid];
if(id == num)
return true;
if(num < id)
binaryFind(id,left,mid+1);
else
binaryFind(idm,mid-1,right);
}
int main()
{
gArray[]=.....;
int len = sizeof(gArray)/sizeof(int);
if(binaryFind(123,0,len-1);
printf("find 123\n");
else
printf("not found\n");
return 0;
}
不知道上面这段程序的思路是否可行?
然后我自己运行了之后,发现若是输入的id不是该区域集内的数字,则会无法跳出递归,要是这个id是这个集合内的,那倒是可以辨别出来返回true,请高手看看这段代码行不行?
上面若是有什么错误的地方,请见谅,纯手打,有一定手误的地方。
若是这个方法不行,那么还有什么方法也顺便提点一下,谢谢
[/code]
------解决方案--------------------
当然可以, 没区别.
------解决方案--------------------
区域集不是连续的数字,而是有一段间隔的数字集合,如
int a[] = {0-50,80-111,150-200...},类似这样的集合,然后对这种情况是否可以使用二分查找来查找某个数字
我自己写的程序
[code = C/C++]
bool binaryFind(int id,int left,int right)
{
int mid = (left+right)/2;
int num = gArray[mid];
if(id == num)
return true;
if(num < id)
binaryFind(id,left,mid+1);
else
binaryFind(idm,mid-1,right);
}
int main()
{
gArray[]=.....;
int len = sizeof(gArray)/sizeof(int);
if(binaryFind(123,0,len-1);
printf("find 123\n");
else
printf("not found\n");
return 0;
}
不知道上面这段程序的思路是否可行?
然后我自己运行了之后,发现若是输入的id不是该区域集内的数字,则会无法跳出递归,要是这个id是这个集合内的,那倒是可以辨别出来返回true,请高手看看这段代码行不行?
上面若是有什么错误的地方,请见谅,纯手打,有一定手误的地方。
若是这个方法不行,那么还有什么方法也顺便提点一下,谢谢
[/code]
------解决方案--------------------
当然可以, 没区别.
------解决方案--------------------
- C/C++ code
int mid = (left+right)/2; //加一句if(left>high) return false应该可以跳出来吧 …… if(num < id) binaryFind(id,left,mid+1);//改为binaryFind(id,mid+1,right); else binaryFind(idm,mid-1,right);//改为binaryFind(id,left,mid-1);
------解决方案--------------------
当然可以了。