相关疑难解决方法(0)

二进制搜索以查找数字所在的范围

我有一个阵列

Values array: 12 20 32 40 52
              ^  ^  ^  ^  ^
              0  1  2  3  4
Run Code Online (Sandbox Code Playgroud)

我必须在其上执行二进制搜索以找到数字所在范围的索引.例如:

  1. 给定数字 - > 19(它位于索引0和1之间),返回0
  2. 给定数字 - > 22(它位于索引1和2之间),返回1
  3. 给定数字 - > 40(位于索引3和4之间),返回3

我以下面的方式实现了二进制搜索,这对于案例1和3来说是正确的但是如果我们搜索案例2或52,55 32等则不正确.

#include <iostream>
using namespace std;

int findIndex(int values[], int number, unsigned first, unsigned last)
{
    unsigned midPoint;
    while(first<last)
    {
        unsigned midPoint = (first+last)/2;
        if (number <= values[midPoint])
            last = midPoint -1;
        else if (number > values[midPoint])
            first = midPoint + 1;
    }
    return midPoint;
}


int main() …
Run Code Online (Sandbox Code Playgroud)

c++

8
推荐指数
1
解决办法
2万
查看次数

三元运算符和类型转换中的混淆

我经历了这个问题 -

为什么结果:1 ? (int *)0 : (void *)0
与以下结果不同: 1 ? (int *)0 : (void *)1

它有何不同?它应该是0(int*)0.
如何查看结果?
我们可以在哪里使用这种表达方式?

c ternary-operator type-conversion void-pointers

7
推荐指数
1
解决办法
834
查看次数