class
HalfSearchTest
//定义折半查找测试类
{
public static void main(String[] args) //定义测试方法main
{
int[] a={1,3,5,6,7,8,9};
//定义测试方法数组
System.out.println(HalfSearch_1(a,3));
//测试折半查找方法1
System.out.println(HalfSearch_2(a,8));
//测试折半查找方法2
}
public static int HalfSearch_1(int[] a,int key)
//定义折半查找方法1(通过中间下标值不等于key来控制循环语句)
{
int min=0,max=a.length-1,mid=(0+a.length-1)/2;
//定义最小下标min,最大下标max,和中间下标mid
while(a[mid]!=key)
//通过中间下标值不等于key来控制循环语句
{
if(a[mid]
//若中间下标值的元素值小于key,则应当在中间下标值的右边找key
min=mid+1;
else
max=mid-1;
//若中间下标值的元素值大于key,则应当在中间下标值的左边找key
if(max
return -1;
mid=(min+max)/2;
//每次改变min或者max值之后,mid的值也跟着改变
}
return mid;
//返回元素在数组中的下标值
}
public static int HalfSearch_2(int[] a,int key)
//定义折半查找方法2(通过最小下标min<最大下标max来控制循环语句)
{
int min=0,max=a.length-1,mid=(0+a.length-1)/2;
//定义最小下标min,最大下标max,和中间下标mid
while(min<=max)
//通过最小下标min<最大下标max来控制循环语句
{
if(a[mid]
min=mid+1;
else if(a[mid]>key) //若中间下标值的元素值大于key,则应当在中间下标值的左边找key
max=mid-1;
else
return mid;
//否则,查找成功,返回所查找元素的下标值
mid=(min+max)/2;
//每次改变min或者max值之后,mid的值也跟着改变
}
return -1;
//while循环不成立,查找失败
}
}
class
{
public static void main(String[] args) //定义测试方法main
{
int[] a={1,3,5,6,7,8,9};
//定义测试方法数组
System.out.println(HalfSearch_1(a,3));
//测试折半查找方法1
System.out.println(HalfSearch_2(a,8));
//测试折半查找方法2
}
public static int HalfSearch_1(int[] a,int key)
//定义折半查找方法1(通过中间下标值不等于key来控制循环语句)
{
int min=0,max=a.length-1,mid=(0+a.length-1)/2;
//定义最小下标min,最大下标max,和中间下标mid
while(a[mid]!=key)
//通过中间下标值不等于key来控制循环语句
{
if(a[mid]
//若中间下标值的元素值小于key,则应当在中间下标值的右边找key
min=mid+1;
else
max=mid-1;
//若中间下标值的元素值大于key,则应当在中间下标值的左边找key
if(max
return -1;
mid=(min+max)/2;
//每次改变min或者max值之后,mid的值也跟着改变
}
return mid;
//返回元素在数组中的下标值
}
public static int HalfSearch_2(int[] a,int key)
//定义折半查找方法2(通过最小下标min<最大下标max来控制循环语句)
{
int min=0,max=a.length-1,mid=(0+a.length-1)/2;
//定义最小下标min,最大下标max,和中间下标mid
while(min<=max)
//通过最小下标min<最大下标max来控制循环语句
{
if(a[mid]
min=mid+1;
else if(a[mid]>key) //若中间下标值的元素值大于key,则应当在中间下标值的左边找key
max=mid-1;
else
return mid;
//否则,查找成功,返回所查找元素的下标值
mid=(min+max)/2;
//每次改变min或者max值之后,mid的值也跟着改变
}
return -1;
//while循环不成立,查找失败
}
}