zoukankan      html  css  js  c++  java
  • 二分法小结

    二分法是一个神奇的东西,弄了半天,总算知道怎样合理的去使用了

    常规的二分法正确的时候返回正确的下标或值,在找不到的情况下,返回比要查找的数稍大点的数(已排序),

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int b = 4, a[] = { 2,6,7 };
     7     int i = 0, j = 2;
     8     while (i < j)
     9     {
    10         int mid = i + (j - i) / 2;
    11         if (a[mid] >= b) j = mid;
    12         else i = mid+1;
    13     }
    14     cout << "要查找的区间:" << "2 6 7 " << endl;
    15     cout << "要查找的数:4" << endl;
    16     cout << a[i] << endl;
    17 }

    而另外的一种二分,可使返回正确的值,若无,则返回尽量小的数

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int b = 4, a[] = { 2,6,7 };
     7     int i = 0, j = 2;
     8     while (i < j-1)
     9     {
    10         int mid = i + (j - i) / 2;
    11         if (a[mid] > b) j = mid;
    12         else i = mid;
    13     }
    14     cout << "要查找的区间:" << "2 6 7 " << endl;
    15     cout << "要查找的数:4" << endl;
    16     cout << a[i] << endl;
    17 }

    (两种方法的不同之处在于跳出循环的条件不同)

  • 相关阅读:
    CDN的基本工作过程
    受控组件和非受控组件
    【转】深入理解margin
    【转】前端面试
    centos7下 mysql5.7离线安装
    HIVE客户端启动缓慢处理步骤
    arthas使用介绍
    Hive重写表数据丢失风险记录
    namenode 问题小记
    Kafka丢失数据问题优化总结
  • 原文地址:https://www.cnblogs.com/kangdong/p/8668939.html
Copyright © 2011-2022 走看看