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
    }
  • 相关阅读:
    MySQL 报错记录
    Python连接MySQL
    Linux-mail设置
    样式学习--参照Oracle写法
    Shell的for和select
    Shell 定时发送邮件检查网站脚本/邮件正文
    Linux之 AWK SED
    MySQL excel导入
    《iOS三问》 -- 从动画系统的实现谈iOS核心动画

  • 原文地址:https://www.cnblogs.com/gczmn/p/8290233.html
Copyright © 2011-2022 走看看