public class TextSort2 {
public static void main(String[] args) {
int[]
arrs={13,26,27,34,52,88,323}; //数组必须为有序数组
System.out.println(find(arrs,323));
}
折半查找:
数组必须为有序数组
思路:先找到数组中间位置的数,用要查询的数与其比较:
如果大于中间数,则往数组中间数的较大一方(右侧查找)
如果小于中间数,则往数组中间数的较小一方(左侧查找)
如果等于中间数,则直接返回该位置
如果没找到,返回-1
@param arrs 有序数组
@param key 要查询的数
private static int find(int[] arrs,int key){
int min=0; //定义最小数索引为0
int max=arrs.length-1; //定义最大数索引为数组长度-1
int
middle; //定义中间数
while(true){
middle=(min+max)/2; //每次得到中间数
if(key==arrs[middle]){
//如果key等于中间数
return
middle;
}else if(key>arrs[middle]){
min=middle+1;
//设置最小位置min为middle+1,并从这个位置往后查找
}else if(key<arrs[middle]){
max=middle-1;
//设置最大位置max为middle-1,并从这个位置往前查找
}
if(max<min){
//如果最小位置min,都大于最大位置索引max,则没找到
return -1;
}
}
}
}