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



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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值