zoukankan      html  css  js  c++  java
  • 二分法习题讲解

    #include <iostream>
    using namespace std;
    int num[]={3,5,7,9,10,12,15,20,25,30};//10个数
    int main()
    {
    int x;
    while(cin>>x)
    {
    int L,R,mid;
    L=0;R=9;
    while(L<R) //找到x值的位置
    {
    //使用该方法的原因是如果存在负数的一些情况,可以实现真正的找到中间值的效果,当然,实际使用情况值得考究
    mid=L+(R-L)/2;
    //mid=(L+R)/2
    if (num[mid]>=x) R=mid; //?
    else L=mid+1;//现在就应该注意这个加1的效果了,如果没有,可能最后会陷入一个死循环
    }
    if (num[L]==x){
    cout<<"The x is find in "<<L<<endl;//最后应该是左边的指针指向目标值,否则就算是失败
    }
    else
    cout<<"No find"<<endl;

    //第二种写法:
    int ans=-1;
    L=0;R=9;
    while(L <= R){
    mid = (L+R)/2;
    if(num[mid] == x){
    ans = mid;
    break;
    }else(num[mid] > x){
    R = mid-1;
    }else
    L = mid+1;
    }

    }
    }

    //当在使用第二种方法是不容易陷入死循环中

    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    php目录递归删除
    php嵌套数据
    HTML 标签
    枚举 递归
    传值传址 结构体
    去超市选择要购买的商品 将数组放入集合
    函数
    集合 ArrayList 类
    特殊集合 Stack Queue Hashtable
    二维数组,多维数组
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/3852730.html
Copyright © 2011-2022 走看看