在C ++中使用三个参数进行递归二进制搜索

时间:2018-02-15 02:05:40

标签: c++ c++11

我试图让这个递归二进制搜索正确,并得到了这么远。到目前为止,我可以让前半部分正确显示,但中间的右侧显示为好像它在左侧。我哪里错了?

Sheets("Sheets2").Range("A1").Offset(0, l - 1).PasteSpecial Paste:=xlPasteFormats

2 个答案:

答案 0 :(得分:0)

这个代码不正确,有一个非常错误 - 您试图在某个固定数组中获取值的偏移量,但是您在此处操作该数组:

DF_A$ID <- unlist(by(DF_A, DF_A$Group_1, function(x) as.integer(factor(x$Group_2))))

你可以清楚地看到这个函数不起作用,因为如果在mid之后的第一个元素的情况下,array + mid + 1将返回0,而它应该返回:     (INT)(大小/ 2)+1

我建议你通过&#39;开始&#39;并且&#39;结束&#39;范围变量到函数。

此文:

        return binarySearch(**array+mid+1**, size-(mid + 1), searchValue);
BST中的T代表&#39; Tree&#39;,但您不创建任何树。

答案 1 :(得分:0)

代替这一部分:

if (array[mid] < searchValue)
{
    return binarySearch(array+mid+1, size-(mid + 1), searchValue);
}

您可以使用:

if (array[mid] < searchValue)
{
    int ans = binarySearch(array+mid+1, size-(mid + 1), searchValue);
    if (ans == -1)
        return -1;
    return mid + ans + 1;
}