java二分查找

二分查找:

   二分查找比线性查找数度要好很多,尤其是对大数组来说更为显著,就像是猜字游戏一样

 

 

猜字游戏:

   二分查找的方法和我们小时候玩的猜字游戏是一样的。在这个游戏里面,有一个小朋友会让你猜她正在想的一个1至100之间的数,

你猜了一个数以后,她会告诉你三种选择中的一个:你猜的比她想的小,或者大了,或者猜对了。

 

   为了能用最少的次数开始猜对,必须从50开始猜,如果她说你猜的太小,则推出那个书在51至100之间,所以下一次猜的是75(51至100的一般)。如果她说你猜得有点大了,则数在(1-49)之间,所以下一次猜25.

  

   每一次猜都会将可能的值划分成两部分。最后范围会缩小到一个数字那么大。不多说。看程序

 

 

 

 /**
 * @author licheng
 * @function 二分查找
 *
 * */

package com.licheng.array;

public class BinarySearch {

 /**
  * @author licheng
  * *二分查找特定整数在整型数组中的位置(递归)
  * @param dataSet(查找的数组)
  * @param data(查找的数据)
  * @param beginIndex(开始下标)
  * @param endIndex(结束下标)
  * @return 数据所在下标
  *
  * */
 public int binarySearch(int [] dataSet, int data, int beginIndex, int endIndex) {
  //如果查找的数要比开始索引的数据要小或者是比结束索引的书要大,或者开始查找的索引值大于结束的索引值返回-1没有查到
  int minIndex = (beginIndex + endIndex)/2;
  
  if (beginIndex > endIndex || data < dataSet[beginIndex] || data > dataSet[endIndex]) {
   return -1;
  }
  if (data > dataSet[minIndex]) {
   return binarySearch(dataSet, data, minIndex+1, endIndex);
  } else if (data < dataSet[minIndex]) {
   return binarySearch(dataSet, data, beginIndex, minIndex-1);
  } else {
   return minIndex;
  }
 }
 
 /**
     *二分查找特定整数在整型数组中的位置(非递归)
    
*@param dataset
    
*@param data
    
*@return index
     */
 public int binarySearch(int [] dataSet, int data) {
  
  int beginIndex = 0;
  int endIndex = dataSet.length - 1;   
  int midIndex = -1;
  
  if (beginIndex > endIndex || data < dataSet[beginIndex] || data > dataSet[endIndex]) {
   return -1;
  }
  while(beginIndex <= endIndex) {
            midIndex = (beginIndex+endIndex)/2;
            if(data <dataSet[midIndex]) { 
               endIndex = midIndex-1; 
            } else if(data>dataSet[midIndex]) { 
              beginIndex = midIndex+1; 
            }else {
              return midIndex;
            }
        }
        return -1;
 }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值