zoukankan      html  css  js  c++  java
  • java实现折半查找(递归和非递归方式)

    /**
     * 使用条件:
     * 1、折半查找必须采用顺序存储结果
     * 2、关键字必须有序
     */
    public class TestBinarySearch {
      public static void main(String[] args) {
        //定义一个数组
        int[] arr = {11,21,31,41,51,61,71,81,91};
        System.out.println("非递归实现:"+binarySearch(arr,61));
        System.out.println("递归实现:"+recursionSearch(arr,0,arr.length - 1,61));
      }
    
      /**
       * 非递归实现
       */
      static int binarySearch(int[] arr,int key){
        //定义开始值和结束值索引
        int start = 0;
        int end = arr.length - 1;
        //查找前的判断 开始值索引大于结束值索引才进行查找
        while (start <= end){
          //定义中间索引
          int mid = (start + end) / 2;
          //如果中间索引对应的元素值等于目标值,直接返回中间值索引
          if (arr[mid] == key){
            return mid;
            //中间值比目标值大,说明目标值在开始值和中间值之间 结束值索引变为mid-1
          }else if (arr[mid] > key){
            end = mid - 1;
            //反之,目标值在中间值和结束值之间,开始值索引变为mid+1
          }else {
            start = mid + 1;
          }
        }
        //查找不到 返回-1
        return -1;
      }
      /**
       * 递归实现
       */
      static int recursionSearch(int[] arr,int start,int end,int key){
        //中间值索引
        int mid = (start + end) / 2;
        //递归开始条件
        while (start <= end){
          //中间值等于目标值,直接返回中间值索引
          if (arr[mid] == key){
            return mid;
          }else if (arr[mid] > key){
            //中间值大于目标值 结束值索引变为mid-1,继续递归查找
            return recursionSearch(arr,start,mid - 1,key);
          }else{
            //中间值小于目标值,开始值索引变为mid+1,继续递归查找
            return recursionSearch(arr,mid + 1,end,key);
          }
        }
        //递归结束 未找到返回-1
        return -1;
      }
    }

    运行结果:

  • 相关阅读:
    并查集模板
    css margin 负值 合并盒子边框线
    滑动门原理
    精灵图制作
    css 单行文本超出用 省略号表示...
    css vertical-align 垂直对齐 解决图片空白缝隙
    css 鼠标样式 取消input 框 轮廓线 防止用户拖拽文本域
    css 显示与隐藏
    css 圆角矩形用法
    css 定位详解
  • 原文地址:https://www.cnblogs.com/sinoaccer/p/12118179.html
Copyright © 2011-2022 走看看