本帖最后由 中山狼 于 2013-10-24 22:59 编辑
//折半查找,主要是查找数据在有序数组中的位置
public static void halfSearch(int[] arr,int num){
//定义一个有序的数组
//int []arr={12,23,34,45,56,67,78,89,90};
//定义需要查找的数据
//int num=34;
//定义用于标示的下限索引
int min=0;
//定义用于表示的上线索引
int max=arr.length-1;
//因为不知道具体位置,所以通过while循环进行数组遍历
while(min<max){
//将下限与上限的索引号相加除以2,得到一个标引号,比较num与该表引号的值得大小
int id=(min+max)/2;
if(num==arr[id]){//如果遇到id与查找数字相同的情况下跳出循环
//在此处,我将num和arr[id]的位置放反了,程序可以运行,但是没有结果
System.out.println(num+"在数组中第"+(id+1)+"的位置");
break;
}else{
if(num>arr[id]){
min=id+1;//遇到num比折半查找中间索引大的情况,就将下线索引的值改为id+1
}else{
max=id-1;//遇到num比折半查找中间索引小的情况,就将上限索引的值改为id-1
}
}
}
if(min>max){
System.out.println("该数字在数组中不存在");
}
}
|