用Java实现二分查找法

二分查找法的原理是:
        二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
 
二分查找法的原理图是:
二分查找法的实现代码是:

package cn.itcast3;
/*
 * 从数组当中找到4所在的索引:
 *   {2,4,6,7,43,57,90,101}
 * 二分法查找:
 *  数组必须排序
 * 依次将所查找数据与中心数据对比,根据大小调整数据边界。
 *
 */
public class Demo3 {

 public static void main(String[] args) {
   
     int[] arr = {2,4,6,7,43,57,90,101};
     int number = 10;
     System.out.println(method(arr, number));
 
 public static int method(int[] arr,int number){
  
       int start = 0; //定义变量,记录最小的索引
       int end = arr.length-1; //定义变量,记录最大的索引
       int mid = (start+end)/2; //定义变量,记录中间的索引
  
       while(arr[mid]!=number) {  //只要查找的数不等于数组中间的数,就继续查找,如果中间的数等于查找的数,      则mid就是要求的索引
   if(number<arr[mid]) {  //如果这个数比数组中间的数小,则让最大的索引=mid-1
    end = mid-1;
   }else if(number>arr[mid]) {  //如果这个数比数组中间的数大,则让最小的所用=mid+1
    start = mid+1;
   }
   
   if(start>end) { //如果出现最小索引大于最大索引的情况,说明数组中不存在这样的元素
    return -1;
   }
   
   mid = (start+end)/2;  //每次循环后,因为首尾的索引变化了,所以中间的索引也需要变化
  }
  
  return mid;  //如果数组中有这个元素,则返回
 }
 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值