二分法

static uint8_t findBattPercent(const uint16_t *table, uint16_t len, uint16_t voltage)
{
    int left = 0, right = len - 1, mid = 0;

    if(voltage < table[left]) {
        return 0;
    } else if(voltage > table[right]) {
        return len;
    }

    while((left + 1) < right) {
        mid = left + (right - left) / 2;
        if(table[mid] < voltage) {
            left = mid;
        } else if(table[mid] > voltage) {
            right = mid;
        } else {
            return mid;
        }

        if(table[left] == voltage) {
            return left;
        } else if(table[right] == voltage) {
            return right;
        }
    }

    return left;
}

  

posted @ 2021-03-01 15:41  咸菜白饭  阅读(5)  评论(0)    收藏  举报