java基础巩固:二分查找法原理理解
概述
“二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法, 但是二分查找的前提是查找的数组是有序的
二分查找原理
-
① 找到数组最大索引、最小索引、中间索引
-
② 取中间索引位置的数据和查询的数据进行比较,相等则直接返回中间索引
-
③ 如果中间索引位置的数据更大,说明查询的数据在中间索引的左边 此时,最大索引等于
上一次中间索引-1重新计算中间索引 -
④ 如果中间索引位置的数据更小,说明查询的数据在中间索引的右边 此时,最小索引等于
上一次中间索引+1重新计算中间索引 -
⑤ 最后当最小索引大于最大索引时,表示查找完毕
代码实现
注意:二分查找返回的索引值表示的是找到的第一个值的索引值
public class App
{
public static void main( String[] args )
{
int[] arr = {1,2,3,4,5,6,7,8};
int index = binSearch(arr, 1);
System.out.println(index);
}
public static int binSearch(int[] arr,int param){
//获取最大索引
int maxIndex = arr.length-1;
//获取最小索引
int minIndex = 0;
//计算中间索引
int halfIndex = (maxIndex + minIndex)/2;
while (maxIndex >= minIndex){
if(arr[halfIndex] == param){
//中间索引处数组值等于查找的数,直接返回中间索引
return halfIndex;
}else if(arr[halfIndex] > param){
//中间索引处数组值大于查找的数,表示查找的值在中间索引左边
maxIndex = halfIndex - 1;
}else{
//中间索引处数组值小于查找的数,表示查找的值在中间索引的右边
minIndex = halfIndex + 1;
}
//重新计算中间索引
halfIndex = (maxIndex + minIndex)/2;
}
//没有找到返回-1
return -1;
}
}