JAVA 二分法查找实现

  1. package junit.test;  
  2. /** 
  3.  * 二分法查找,必须对已经排好序的序列进行查找,假设现在有一个递增序列,取中间位置的数及序号midIndex=(beginIndex+endIndex)/2, 
  4.  * 然后将一个序列折成两半,beginIndex~midIndex,midIndex~endIndex,如果目标数T等于S[midIndex],找到, 
  5.  * 否则,如果T<S[midIndex],则在beginIndex~midIndex中继续查找;如果T>S[midIndex],则在midIndex~endIndex 
  6.  * 中继续查找,如此反复进行,直到找到目标数据, 
  7.  * 初始对传入参数进行约束及避免无效计算的条件为,T<S[beginIndex]或T>S[endIndex]或beginIndex>endIndex 
  8.  * 或beginIndex>S.length-1||endIndex>S.length-1||beginIndex<0||endIndex<0 
  9.  * 
  10.  */  
  11. public class BinarySearchTest {  
  12.     /** 
  13.      * 找到返回索引下标,否则返回-1; 
  14.      * @return index 
  15.      */  
  16.  public int binarySearch(int dataset[],int target,int beginIndex,int endIndex){  
  17.   //数组校验  
  18.   if(dataset==null||dataset.length==0){  
  19.       return -1;  
  20.   }  
  21.   //beginIndex,endIndex校验  
  22.   if(beginIndex>endIndex||beginIndex>dataset.length-1||endIndex>dataset.length-1||beginIndex<0||endIndex<0){  
  23.    System.out.println("error arguments!");  
  24.    return -1;  
  25.   }  
  26.     
  27.   //无效参数处理  
  28.   if(target<dataset[beginIndex]||target>dataset[endIndex]||beginIndex>endIndex){  
  29.    return -1;  
  30.   }  
  31.   int midIndex=(beginIndex+endIndex)/2;  
  32.     
  33.   //System.out.println(midIndex);  
  34.   if(target==dataset[midIndex]){  
  35.    return midIndex;  
  36.   }  
  37.   else if(target<dataset[midIndex]){  
  38.    return binarySearch(dataset,target,beginIndex,midIndex-1);//注意midIndex-1  
  39.   }  
  40.   else{  
  41.    return binarySearch(dataset,target,midIndex+1,endIndex);//注意midIndex+1  
  42.   }  
  43.     
  44.  }  
  45.    
  46.  /** 
  47.   * @param args 
  48.   */  
  49.  public static void main(String[] args) {  
  50.   // TODO Auto-generated method stub  
  51.   BinarySearchTest bs=new BinarySearchTest();  
  52.     
  53.   int[] data=new int[]{1,3,5,7,9,12};  
  54.     
  55.   int index=bs.binarySearch(data,12,05);  
  56.     
  57.   System.out.println("The position of the target number in the array is :"+ index);  
  58.  }  
  59.   
  60. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值