java实现二分法递归_二分法的简单实现-------递归和非递归

//非递归实现二分法

public class Jianzhi{

public static void main (String[] args){

int[] num = {1,2,3,4,5,100};

int m = find(num , 5) ;

System.out.println(m);

}

public static int find(int[] list , int m ){

if(list == null ){

System.out.println("输入的数组长度出错。") ;

}else if(list.length ==1 ){ //如果传入的数组只有一个数字

int n = list[0]==m?0:-1 ;

return n ;

}else {

int left = 0 ;

int right = list.length-1 ;

while(left <= right){

int mid = (left + right)/ 2 ;

if(list[mid]==m){

return mid ;

}else if (list[mid]

left = mid + 1 ;

}else if(list[mid]>m){

right = mid - 1 ;

}

}

System.out.println("未在数组中找到数字"+m);

}

return -1 ;

}

}

//注意: 1.需要把mid放入循环中,不能放在循环体外,因为每次都要把mid赋值给left或者right如果放在外面每次赋值的数都一样会死循环。

// 2.写二分法时需要判断循环何时终止,如果每次都是left=mid,right=mid,会导致循环无法终止

// ,所以此处用了left=mid+1 right=mid-1 。这样做还有一个好处:发现mid不是所要找的数时,就直接舍弃,让left和right不指向这个节点。

——————————————————————————————————————————————————

//递归实现二分法

public class Jianzhi{

// (目标数组,目标值,左边界,右边界)

public static int find(int[] list , int m ,int begin , int end) {

if(list == null){

System.out.println("输入的数组是null");

return -1 ;

}

if(list.length == 1 ){

return list[0]==m?0:-1 ;

}

if(begin > end){

return -1 ;

}

int mid = (begin + end) / 2 ;

if(list[mid] == m){

return mid ;

}else if (list[mid] < m ){

return find(list , m ,mid+1 , end );

}else if (list[mid] > m ){

return find(list , m , begin , mid-1 );

}

return -1 ;

}

public static void main (String[] args){

int[] num = {1,2,3,4,5,100};

int m = find(num , 1,0,num.length-1) ;

System.out.println(m);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值