标签:== 查找算法 e30 ber nbsp 比较 没有 技术 turn
二分查找又称折半算法,此算法作为一个经典的查找算法是我们不得不掌握的算法
这个算法查找的前提是查找的数据是有序的,我们以数组为例,使用二分查找法进行查找的时候我们应该先定义三个字段:
1.left指向数组第一个数据
2.right指向数组最后一个元素
3.mid呢指向(left+right)/2位置的元素,就是他们中间的位置。
当我们要在一个数组中查找一条数据a时,有这么几个步骤:
建议对二分查找不太熟悉的同学可以先在草稿纸上、电脑上或者脑海里定义一个0-16的有序数组跟着上边的步骤来查找一下数据5。
下面这个图是我画的图,来看一下跟你画的步骤或者想象的步骤一样么
如果上图你已经看明白了的话那么接下来我们就上代码吧,
public static void select(int[]num,int a){
int left=0;
int right=num.length-1;
int m=(left+right)/2;
while(left<=right){
if(num[m]==a){
System.out.println("在"+m+"位置找到");
return;
}
if (num[m]>a){
right=m-1;
}else{
left=m+1;
}
m=(left+right)/2;
}
System.out.println("没找到");
}
上面的方法使用了一个普通的循环的方式,二分还存在一种递归的写法,这里也分享出来
public static void select(int[]num,int a,int left,int right){
if(left>right){
System.out.println("没找到");
return;
}
int m=(left+right)/2;
if(num[m]==a){
System.out.println("在"+m+"位置找到");
return;
}
if (num[m]>a){
right=m-1;
select(num, a,left,right);
}else{
left=m+1;
select(num, a,left,right);
}
}
二分查找法讲到这里已经讲完了。在这里温馨提示大家,学习算法时,我们没必要拘泥于代码的实现,那没有意义。我的建议就是深入理解步骤,当你理解步骤以后代码是随你怎么玩都可以的。
标签:== 查找算法 e30 ber nbsp 比较 没有 技术 turn
原文地址:https://www.cnblogs.com/zhixiang-org-cn/p/9245649.html