二分查找的两种实现方法-【Java版】
二分查找,又叫折半查找。给定一个数据,查看该数据是否在给定的数组中,如果存在,就返回这个数据在数组中的下标位置,如果不存在,则返回-1g需要实现二分查找的前提是:待查找的数组是有序的。二分查找的思路:1:需要有个有序的数组2:需要一个待查询的数据3:先获取的数组的中间下标的值4:拿着中间值和待查询数据进行比较4.1:如果中间值小于待查数据,说明,待查找的数据在中间数据的右侧后半段(因为数组有序的,
二分查找,又叫折半查找。给定一个数据,查看该数据是否在给定的数组中,如果存在,就返回这个数据在数组中的下标位置,如果不存在,则返回-1
g需要实现二分查找的前提是:待查找的数组是有序的。
二分查找的思路:
1:需要有个有序的数组
2:需要一个待查询的数据
3:先获取的数组的中间下标的值
4:拿着中间值和待查询数据进行比较
4.1:如果中间值小于待查数据,说明,待查找的数据在中间数据的右侧后半段(因为数组有序的,折半后,右边数据大于左边数据),所以,查询的起始位置应该是中间位置+1
4.2:如果中间值大于待查数据,说明,待查数据在中间值的左侧后半段,所以,查找位置的结束点应该是中间值下标-1
4.3:如果中间值等于比较值的话,就直接返回中间值的下标
4.4:否则就返回-1
二分查找示意图:

根据以上思路,可以分为两种方案:一种是递归查询的,一种是while查询的。请看代码
一:使用while方案的:
/**
* 二分查找的真实方法
* @param array 待查数组
* @param compartDate 比较的数据
* @return 比较的数据的下标
*/
public static int biSearchWhileFunction(int [] array,int compartDate){
//起始位置
int startIndex = 0;
int endIndex = array.length-1;
//中间值的下标为止
int mIndex;
while(startIndex <= endIndex){
mIndex = (startIndex+endIndex)/2;
//如果中间值== 比较值。则中间值的下表+1
if(array[mIndex] == compartDate){
return mIndex ;
}else if(array[mIndex]<compartDa原创不易,完成人机校验,阅读全文