java折半查找
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;
?????}?
???}
?}
}