java算法的二进制搜索实现
我需要帮助实现二进制搜索算法,有人能告诉我我的代码有什么问题吗:java算法的二进制搜索实现,java,algorithm,search,binary,Java,Algorithm,Search,Binary,我需要帮助实现二进制搜索算法,有人能告诉我我的代码有什么问题吗: public int bsearch(Item idToSearch) { int lowerBoundary = 0; int upperBoundary = myStore.size() - 1; int mid = -1; while(upperBoundary >= lowerBoundary) { mid = (lowerBoundary + upperBound
public int bsearch(Item idToSearch) {
int lowerBoundary = 0;
int upperBoundary = myStore.size() - 1;
int mid = -1;
while(upperBoundary >= lowerBoundary) {
mid = (lowerBoundary + upperBoundary) / 2;
//if element at middle is less than item to be searched, than set new lower boundary to mid
if(myStore.get(mid).compareTo(idToSearch) < 0) {
lowerBoundary = mid - 1;
} else {
upperBoundary = mid + 1;
}
} //end while loop
if(myStore.get(mid).equals(idToSearch)) {
return mid;
} else {
return -1; // item not found
}
} // end method
public int b搜索(项目idToSearch){
int-lowerBoundary=0;
int upperbound=myStore.size()-1;
int mid=-1;
while(上边界>=下边界){
中间=(下边界+上边界)/2;
//若中间的元素小于要搜索的项,则将新的下边界设置为中间
if(myStore.get(mid.compareTo)(idToSearch)<0){
下限=中间-1;
}否则{
上边界=中间+1;
}
}//在循环结束时结束
if(myStore.get(mid.equals)(idToSearch)){
中途返回;
}否则{
return-1;//未找到项
}
}//结束方法
我认为您在更新下边界
和上边界
时犯了一个错误
它可能是:
if(myStore.get(mid).compareTo(idToSearch) < 0){
lowerBoundary = mid + 1;
} else {
upperBoundary = mid - 1;
}
if(myStore.get(mid.compareTo)(idToSearch)<0){
下限=中间+1;
}否则{
上边界=中间-1;
}
如果你在
中间找到元素,为什么不打破循环呢?我认为你在更新下边界和上边界时犯了一个错误
它可能是:
if(myStore.get(mid).compareTo(idToSearch) < 0){
lowerBoundary = mid + 1;
} else {
upperBoundary = mid - 1;
}
if(myStore.get(mid.compareTo)(idToSearch)<0){
下限=中间+1;
}否则{
上边界=中间-1;
}
如果你在mid
找到元素,为什么不打破循环呢
- 当下限和上限相同时停止
- 找到匹配项时停止
- 使用
mid=(hi+lo)>>1代码>以避免溢出导致错误
- 阅读JDK中的代码,JDK在正常工作时已经完成了这项工作
我会的
- 当下限和上限相同时停止
- 找到匹配项时停止
- 使用
mid=(hi+lo)>>1代码>以避免溢出导致错误
- 阅读JDK中的代码,JDK在正常工作时已经完成了这项工作
第一个问题是边界问题,如果他发现了值,你也应该停止,但他没有发现,这可能导致忽略
while(upperBoundary >= lowerBoundary)
{
mid = (lowerBoundary + upperBoundary) / 2;
if (myStore.get(mid).equals(idToSearch)) break; // goal
if(myStore.get(mid).compareTo(idToSearch) < 0)
{
lowerBoundary = mid + 1;
}
else
{
upperBoundary = mid - 1;
}
}
while(上边界>=下边界)
{
中间=(下边界+上边界)/2;
if(myStore.get(mid).equals(idToSearch))break;//目标
if(myStore.get(mid.compareTo)(idToSearch)<0)
{
下限=中间+1;
}
其他的
{
上边界=中间-1;
}
}
第一个问题是边界,如果他发现了值,你也应该停止,但他没有发现,这可能导致忽略
while(upperBoundary >= lowerBoundary)
{
mid = (lowerBoundary + upperBoundary) / 2;
if (myStore.get(mid).equals(idToSearch)) break; // goal
if(myStore.get(mid).compareTo(idToSearch) < 0)
{
lowerBoundary = mid + 1;
}
else
{
upperBoundary = mid - 1;
}
}
while(上边界>=下边界)
{
中间=(下边界+上边界)/2;
if(myStore.get(mid).equals(idToSearch))break;//目标
if(myStore.get(mid.compareTo)(idToSearch)<0)
{
下限=中间+1;
}
其他的
{
上边界=中间-1;
}
}
调试器肯定能告诉你什么是错误的。一个非常不正确的算法…调试器肯定能告诉你什么是错误的。一个非常不正确的算法。。。