java-利用折半查找算法将一个数插入有序数组中适当位置

来源:互联网 发布:拖欠淘宝贷款犯罪吗 编辑:程序博客网 时间:2024/05/22 15:03


class  HalfSearchTest        //定义折半查找测试类
{
public static void main(String[] args) //定义测试方法main
{
int[] a={1,3,5,6,7,8,9};           //定义测试方法数组
System.out.println(HalfSearch_1(a,2));  //测试折半查找方法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 min;
mid=(min+max)/2;   //每次改变min或者max值之后,mid的值也跟着改变
}
return mid;   //返回元素在数组中的应当插入的为止,即min的为止(可以自己举例验证)
}




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 min;   //返回元素在数组中的应当插入的为止,即min的为止(可以自己举例验证)
}
}
class  HalfSearchTest        //定义折半查找测试类
{
public static void main(String[] args) //定义测试方法main
{
int[] a={1,3,5,6,7,8,9};           //定义测试方法数组
System.out.println(HalfSearch_1(a,2));  //测试折半查找方法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 min;
mid=(min+max)/2;   //每次改变min或者max值之后,mid的值也跟着改变
}
return mid;   //返回元素在数组中的应当插入的为止,即min的为止(可以自己举例验证)
}




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 min;   //返回元素在数组中的应当插入的为止,即min的为止(可以自己举例验证)
}
}
0 0
原创粉丝点击