随笔 - 0, 文章 - 75, 评论 - 0, 引用 - 0
数据加载中……

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;
 
}
}
}



}

posted on 2012-04-22 15:20 hantai 阅读(105) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: