温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java二分搜索算法常见使用误区是什么

发布时间:2021-12-30 15:01:45 来源:亿速云 阅读:107 作者:iii 栏目:云计算

这篇文章主要讲解了“java二分搜索算法常见使用误区是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java二分搜索算法常见使用误区是什么”吧!

直接使用二分搜索法,搜索一个无序的数组或集合。
 
如果你运气好的话,可能会搜索到你想要的数据,但是大部分情况下你不能得到你想要的结果。因为二分搜索是按照中间值来计算你要搜索数据的范围,每次逐渐缩小范围。如果你的结果不在一个按照升序排列的数组中,你要搜索的数据很可能被遗弃,然后返回负值。我们可以通过如下所示一段程序来断言,数组是否是有序的。
 
for(int i=0; i< arr.length; i++) {
    if(arr[i]>arr[i+1]) {
        return 0
    }
    return 1;
}
 

自己写了一个二分搜索算法,陷入了一个死循环,不知道为什么?


 因为你的边界没有完全控制好,所以造成了这种情况。如下:


反面教材 1:
数组 `int arr[] = {12,14,143,145,643,23453,233452};`
搜索数据 233452(直接陷入死循环)

int start = 0;
int end = arr.length-1;
while(start <= end) {
    int mid = (start + end) / 2;
    if(key < arr[mid]){
        end = mid;
    }else if(key > arr[mid]) {
        start = mid;
    }else {
        return mid;
    }
}
return -1;

如上这种写法看起貌似是正确的,如果仔细分析的话,会发现数组的长度为7

* 第一次循环中间量mid=3

* 第二次循环中间量mid=4

* 第三次循环中间量mid=5

* 第四次循环中间量mid=6

* 第五次循环中间量mid=6

* 第六次循环中间量mid=6

* 第七次循环中间量mid=6
* .....
* 由此陷入死循环

反面教材 2:
如果我们通过调试之后,把程序调整成如下,循环搜索结果,发现依然是个死循环。最终卡在了中间值5上,究其原因是因为,我们的中间值不能一直缩小,所以最终导致这个问题。

int start = 0;
int end = arr.length-1;
while(start <= end) {
    int mid = (start + end) / 2;
    if(key < arr[mid]){
        end = mid + 1;
    }else if(key > arr[mid]) {
        start = mid - 1;
    }else {
        return mid;
    }
}
return -1;


正确写法如下:(迭代过程中,循环不断减小。)


int start = 0;
int end = arr.length-1;
while(start <= end) {
    int mid = (start + end) / 2;
    if(key < arr[mid]){
        end = mid - 1;
    }else if(key > arr[mid]) {
        start = mid + 1;
    }else {
        return mid;
    }
}
return -1;

感谢各位的阅读,以上就是“java二分搜索算法常见使用误区是什么”的内容了,经过本文的学习后,相信大家对java二分搜索算法常见使用误区是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI