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;
      }
    }

    运行结果:

  • 相关阅读:
    1.4redis小结--队列在抢购活动的实现思路
    1.3redis小结--配置php reids拓展
    redis小结 1-2
    redis小结 1-1
    pandas学习小记
    Python简单算法的实现
    python编码
    ThinkPHP中的__initialize()和类的构造函数__construct()
    js正则常用方法
    总结了下PHPExcel官方读取的几个例子
  • 原文地址:https://www.cnblogs.com/sinoaccer/p/12118179.html
Copyright © 2011-2022 走看看