Java 二分查找法
程序员文章站
2024-03-16 09:05:28
...
/**
* 二分查找法
* 适用于不经常变动而查找频繁的有序列表。
* @author Administrator
*/
public class ErFenChaZhaoFa {
public static void main(String[] args){
int[] arry = {1,4,5,7,8,12,15,17,22,36,35,45,50,112};
int i = 35; //查找的值
System.out.println( i + "的索引位置是:" + binarySearch(arry,i));
}
/**
* 循环实现二分查找法
* 限制:
* 必须是有序的序列
* 优点:
* 效率极高
* @param arry 要查找的数组
* @param i 查询的值
* @return -1则没查询到
*/
public static int binarySearch(int[] arry,int i){
int minIndex = 0; //最小索引
int maxIndex = arry.length-1; //最大索引
while(minIndex <= maxIndex){ //循环条件,最小索引 小于或者等于 最大索引 (如果超出了就是没找到)
int midIndex = (maxIndex+minIndex)/2; //计算中间索引(最小索引+最大索引)/2
if(i == arry[midIndex]){ //当数组下标为中间索引的值 等于 i 的时候
return midIndex; //返回中间索引
}
else if( i < arry[midIndex]){ //当i的值 小于 数组下标为中间索引的值 的时候
maxIndex = midIndex - 1; //(最小索引不变,最大索引 = 中间索引 - 1)
}else{ //大于的时候
minIndex = midIndex + 1; //(最大索引不变,最小索引 = 中间索引 + 1)
}
}
return -1; //返回-1
}
}
上一篇: 砍树问题(二分法)
下一篇: Android简单使用GSON