Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 查找大于排序数组给定键的最小数的索引,这两个函数是否返回相同的结果?_Arrays_Algorithm_Binary Search_Sorted_Sortedlist - Fatal编程技术网

Arrays 查找大于排序数组给定键的最小数的索引,这两个函数是否返回相同的结果?

Arrays 查找大于排序数组给定键的最小数的索引,这两个函数是否返回相同的结果?,arrays,algorithm,binary-search,sorted,sortedlist,Arrays,Algorithm,Binary Search,Sorted,Sortedlist,给定一个已排序的整数数组(非降序),我们需要找到大于给定键的最小数的索引,我写了两个函数,它们除了返回行之外是相同的 lo和hi指定低指数和高指数,包括 int minimum_index_greater(int *a, int lo, int hi, int key) { int left = lo - 1; int right = hi + 1; while (left + 1 < right) { int mid = (left + righ

给定一个已排序的整数数组(非降序),我们需要找到大于给定键的最小数的索引,我写了两个函数,它们除了返回行之外是相同的

lohi指定低指数和高指数,包括

int minimum_index_greater(int *a, int lo, int hi, int key) {
    int left = lo - 1;
    int right = hi + 1;

    while (left + 1 < right) {
        int mid = (left + right) / 2;

        if (a[mid] > key) right = mid;
        else              left = mid;
    }

    return right;    -------> function 1
    return left + 1; -------> function 2
}
int-minimum\u-index\u-more(int*a、int-lo、int-hi、int-key){
int left=lo-1;
int right=hi+1;
而(左+1<右){
int mid=(左+右)/2;
如果(a[mid]>键)right=mid;
左=中;
}
返回权限;------>函数1
返回左+1;------>函数2
}
第一个问题是它们中的任何一个是否正确(返回正确的值)

第二个问题是,我假设两个函数在这种情况下是相同的,它们在每种情况下都返回相同的值。我对此非常肯定。我说得对不对?请解释一下


p/S:当我在上解决问题时。我需要找到这个值并解决问题,使用函数1,我得到97.72/100分(我不知道为什么不是100分),使用函数2,我只得到94.44分。所以我想问题出在这里

签出函数。它完全符合您的要求(简单的二进制搜索)。关于它,您有一个很棒的教程。

签出功能。它完全符合您的要求(简单的二进制搜索)。你有一个很好的教程。

你认为
lo
hi
是什么意思?我想应该指定一个要搜索的索引范围,但是
hi
是独占的还是包含的?很抱歉,lo和hi在指定索引范围时既低又高,而且它们都是包含的。理论上,返回的两个值是相同的。然而,在我看来,你得到的左和右的初始值是错误的。您确定需要使用
lo-1
hi+1
而不是
lo+1
hi-1
。我通常以类似的方式实现二进制,在我的实现中,左端是包含的,右端是独占的。这意味着您需要使用
lo
hi+1
(如果两端最初都包含在内)。我从不对二进制搜索进行编码,我总是从这里复制它们:@IvayloStrandjev初始化“left=lo-1”和“right=hi+1”完全是有意的,因为我希望在每次迭代中都检查左右位置,这也是我在迭代结束时设置“left=mid”或“right=mid”的原因,因为它们被检查了
lo
hi
的意思是什么?我想应该指定一个要搜索的索引范围,但是
hi
是独占的还是包含的?很抱歉,lo和hi在指定索引范围时既低又高,而且它们都是包含的。理论上,返回的两个值是相同的。然而,在我看来,你得到的左和右的初始值是错误的。您确定需要使用
lo-1
hi+1
而不是
lo+1
hi-1
。我通常以类似的方式实现二进制,在我的实现中,左端是包含的,右端是独占的。这意味着您需要使用
lo
hi+1
(如果两端最初都包含在内)。我从不对二进制搜索进行编码,我总是从这里复制它们:@IvayloStrandjev初始化“left=lo-1”和“right=hi+1”完全是有意的,因为我希望在每次迭代中都检查左右位置,这也是我在迭代结束时设置“left=mid”或“right=mid”的原因,因为它们是经过检查的