zoukankan      html  css  js  c++  java
  • 数组-折半查找

    //折半查找
    public int  halfFind(int[] arr,int key)
    {
       int min = 0; //数组第一个下标
       int max = arr.length -1; //数组最大下标
       int mid = ( min + max ) / 2; //数组中间下标
       //如果中间值不等于要找的值,继续折半
       while(arr[mid] != key){
              //如果中间值大于查找值,说明key在左边,所以最大下标左移
              if(arr[mid] > key)
              {
                     max = mid - 1;
              }else if(arr[mid] < key)//同理,在左边,最小下标右移
             {
                      min = mid + 1;
              }
             //如果最小下标大于最大下标,说明没有key
             if(min > max)
             {
                  //没找到
                  return -1;
             }
             //根据最大最小下标值重新确定中间下标
             mid = (min + max) / 2; 
             
       }
       //输出key值所在位置
       return mid;
    }
    
    //折半2
    public int  halfFind(int[] arr, int key)
    {
       int min = 0;//数组第一个下标
       int max = arr.length -1;//数组最大下标
       int mid;//数组中间下标
       while(min <= max)
       {
             mid = (max + min) / 2;  //mid = (max + min) >> 1; 右移效果一样
             if(key > arr[mid])
             {
                    min = mid + 1;
             }else if(key < arr[mid])
             {
                    max = mid - 1;
             }else{
                  return mid;//key所在下标
              }
        }
      return -1;// 不存在key
    }
  • 相关阅读:
    facedetect
    gmm
    拉格朗日对偶
    基于 MeanShift 算法的目标跟踪问题研究
    视频目标跟踪算法综述
    AtCoder Beginner Contest 088 C Takahashi's Information
    L3-016. 二叉搜索树的结构
    垒骰子
    1130. Infix Expression (25)
    1129. Recommendation System (25)
  • 原文地址:https://www.cnblogs.com/gczmn/p/8290233.html
Copyright © 2011-2022 走看看