二分法查找有序数组

标题刷题遇到一个二分法查找的题,由于之前在学校学习二分法时没有特别理解,所以也就没有写出来。就查了一下大家都是怎么实现的,看了之后对二分法有了更好的理解。

	  public class BinarySearch {
 /*
   * 循环实现二分查找算法arr 已排好序的数组x 需要查找的数-1 无法查到数据
	 */
  public static int binarySearch(int[] arr, int x) {
  //数组开头第一位
      int low = 0;   
      //数组末尾一位
      int high = arr.length-1;  
      //要满足 从小到大有序排列
     while(low <= high) {   
         int middle = (low + high)/2;   
         if(x == arr[middle]) {   
             return middle;   
         }else if(x <arr[middle]) {   
             high = middle - 1;   
         }else {   
             low = middle + 1;   
         }  
     }  
     return -1;  
 }
 //递归实现二分查找
 public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){    
        int midIndex = (beginIndex+endIndex)/2;    
        if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){  
            return -1;    
        }  
        if(data <dataset[midIndex]){    
            return binarySearch(dataset,data,beginIndex,midIndex-1);    
        }else if(data>dataset[midIndex]){    
            return binarySearch(dataset,data,midIndex+1,endIndex);    
        }else {    
            return midIndex;    
        }    
    } 
 public static void main(String[] args) {
     int[] arr = { 10,23,39,29,78,87,99,108 };
     System.out.println("循环查找:" + (binarySearch(arr, 87) + 1));
     System.out.println("递归查找"+binarySearch(arr,3,87,arr.length-1));
 }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值