zoukankan      html  css  js  c++  java
  • 2分查找

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    
    <body>
    </body>
    <script>
      const arr = [3, 5, 19, 22, 25, 33, 45, 47, 57, 66, 71, 78];
      console.log(init(arr, 88))
      console.log(init(arr, 66))
      console.log(init(arr, 22))
      function init(A, x) {
        let l = 0;
        let r = A.length - 1;
        let guess;
        while (l < r) {
          guess = Math.floor((l + r) / 2);
          if (A[guess] === x)
            return guess
          else if (A[guess] > x) {
            r = guess - 1
          } else {
            l = guess + 1
          }
        }
        return -1
      }
    </script>
    
    </html>

    1. 我们先声明最左边为 0 ,最右边为传入数组的长度 ,

    guess 表示为中间值
     let l = 0;
        let r = A.length - 1;
        let guess;

    2. 做一个判断 当左边右边的时候 程序运行 反之 返回 -1 

      while (l < r) {
        }
        return -1

    3. 做判断 

    (1) 当   A[guess] 这个中间值刚好等于 我们要查找的值时   返回 guess 

     (2) 当  A[guess]  大于查找的值 时 ,

    设置最右边 r 为  r =   guess - 1 

     比如    A[0]  到   A[guess - 1 ] 这期间的所有值

     (3) 当  A[guess]  小于查找的值 时 ,

    设置最左边  l 为     l = guess + 1

     比如    A[guess +1 ]  到   A [length-1 ] 这期间的所有值

     guess = Math.floor((l + r) / 2);
          if (A[guess] === x)
            return guess
          else if (A[guess] > x) {
            r = guess - 1
          } else {
            l = guess + 1
          }
  • 相关阅读:
    mysql触发器实时检测一条语句进行备份删除
    ORA-12560: TNS: 协议适配器错误 windows
    DG:windows密码文件
    vim already exists!
    k8s 集群升级
    部署 k8s 备份工具 velero
    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    lens 添加 k8s 集群
    redis系列
    s3c2440裸机-I2c编程-3.i2c中断服务程序
  • 原文地址:https://www.cnblogs.com/guangzhou11/p/12405361.html
Copyright © 2011-2022 走看看