折半查找:必须是在有序的表中进行。这是重要的一点。这折半查找提高了效率。
1.待查找数据值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围。
2.待查找数据值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围。
一种是实现的角标;一种是直接实现的数值。
//折半查找就是找到,必须是有序的列表。
public class halfsearch {
public static void mian(String args[]){
int[]arry={1,10,51,3,4,5};
int jg=halfSearch(arry, 2);
System.out.print(jg);
}
//折半查找第一种方法
public static int halfSearch(int[] arry,int key){
int min=0;
//最大的角表;
int max=arry.length-1;
int mid;
while(max>min){
mid=(min+max)/2;
if(key>mid){
min=mid+1;
}
else if(key<mid) {
max=mid=1;
}else
//返回的是角标
return mid;
}
//不再范围内的时候就是越界反悔-1
return -1;
}
//第二种方法
public static int halfSearch_2(int[] arry,int key){
int min=0;
int max=arry.length-1;
int mid=(min+max)/2;
//比较的是中间的值和要找的值进行比较
while(key!=arry[mid]){
if(key>arry[mid]){
min=mid+1;
}else if(key<arry[mid]){
max=mid-1;
}
//如果最大的值和最小的值重合以后返回-1
else if(min>max){
return -1;
}
mid=(min+max)/2;
}
return mid;
}
}