折半查找法

学习java基础:折半查找法。
折半查找法的基本思路是:设置3个变量,分别为min,mid,max。min表示数组的最小角标,max表示数组的最大角标(arr.length-1),mid表示中间角标(min+max)/2。一个数组如arr={1,2,3,4,5,7,8,12,15,17,19},min=1;max=10;mid=5;要查找的数key等于12.

 

1.判断当中间角标mid等于要查找的数时,返回mid,即要查找数的角标位置。

2.当mid不等于要查找的数时,判断这个mid与key的关系,如果mid>key,则max=mid-1;如果mid<key,则min=mid+1;

3.如果key在这个数组中不存在的话,只要判断min与max的关系即可,当min>max时返回-1,表示key不存在与数组当中。

 

具体代码实现:
class HalfFind{
public static void main(String[] args){
int[] arr = {2,3,5,12,23,24,35,45,46,47,48};
int index = half(arr,12);
System.out.println("index="+index);
}
public static int half(int[] arr,int key){
int min,mid,max;
min=0;
max=arr.length-1;
mid=(max+min)>>2;
while(min<=max){
if(arr[mid]==key)
{
return mid;
}
else if(arr[mid]>key)
{
max=mid-1;
mid=(min+max)/2;
}
else if(arr[mid]<key)
{
min=mid+1;
mid=(min+max)/2;
}
}
return -1;
}
}

 

如果给予一个值要插入在一个有序的数组当中,并在数字插入之后还保持数组的有序性,获得这个数字在新数组中的下表,只要将以上程序的返回值改为min即可

比如:arr={1,2,3,4,5,7,8,12,15,17,19}这个数组当中插入6,则应该是arr[5]这个位置。

在这个数组当中查找6这个值,查到最后应该是min=5,max=4,mid=4.

另外在java中已经写好了一个方法可以直接折半查找到一个数。方法为:Array.binarySearch(数组名,要查找的数字).前提是引入java.util.*包。

使用这个方法,当查找的数字不存在数组当中的时候,它返回的是-min-1,指的是这个数字的插入点的负数-1.这样做的好处在于,告诉你这个数在数组中不存在,并且如果你想插入这个数字应该插什么地方。

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值