zoukankan      html  css  js  c++  java
  • 二分搜索 float

    Given a sorted array of floats, find the index of the number closest to x: Example: {1.2, 2.5, 9.3} x = 5, return 1

    #include<iostream>
    #include<stdlib.h>
    #include <math.h>
    using namespace std;
    
    float a[] = {1.2, 2.6, 3.4, 4.2, 5.5, 6.7, 7.1, 8.5, 9.8, 9.9};
    
    int main() 
    {
        int n = sizeof(a)/sizeof(int);
        float f;
        cout << "Please input the number:" << endl;
        cin >> f;
        int low = 0;
        int high = n - 1;
        int mid;
        int index;
        float diff, diff_l, diff_r;
        while(low <= high) {
            int flag1 = 0;
            int flag2 = 0;
            mid = low + (high - low)/2;
            diff = (a[mid] - f) > 0 ? (a[mid] - f) : (f - a[mid]);
            if(mid - 1 >= low ) {
                diff_l = (a[mid - 1] - f) > 0 ? (a[mid - 1] - f) : (f -a[mid - 1]) ;
                flag1 = 1;
            }
            if(mid + 1 <= high){
                diff_r = (a[mid + 1] - f) > 0 ? (a[mid + 1] -f) : (f - a[mid + 1]);
                flag2 = 1;
            }
            if(flag1 == 1 && flag2 == 1)
            {
                if (diff_l >= diff && diff_r >= diff) {
                    index = mid;
                    break;
                } 
                if (diff_l < diff_r) {
                    high = mid - 1;
                } else {
                    low = mid + 1;
                }
            } else if(flag1 == 1) {
                if(diff_l >= diff) {
                    index = mid ;
                    break;
                } else {
                    high = mid - 1;
                }
            } else if(flag2 == 1) {
                if (diff_r >= diff) {
                    index = mid;
                    break;
                } else {
                    low = mid + 1;
                }
            } else {
                index  = mid;
                break;
            }
        }
        cout << index << endl;
        return 0;
    }
    

      

  • 相关阅读:
    android sdk里的各目录作用
    android广播接收器
    Android 服务
    全球10个智慧城市应用案例
    大数据应用蓝皮书:未来涉及5个热点领域
    2018杭州-云栖大会
    上海世界人工智能大会大佬观点
    2018世界人工智能大会
    大数据安全
    2018第37周六
  • 原文地址:https://www.cnblogs.com/LyningCoder/p/4233878.html
Copyright © 2011-2022 走看看