Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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
C B搜索和搜索范围?_C_Algorithm_Search_Range_Bsearch - Fatal编程技术网

C B搜索和搜索范围?

C B搜索和搜索范围?,c,algorithm,search,range,bsearch,C,Algorithm,Search,Range,Bsearch,B搜索对于直接搜索非常好,但是如果我需要例如搜索范围,我应该使用什么呢 更新 例如,如果我想找到a和b之间的值范围(a>=x=x

B搜索对于直接搜索非常好,但是如果我需要例如搜索范围,我应该使用什么呢

更新

例如,如果我想找到a和b之间的值范围(a>=x 更新

范围值不能相等。 所以,如果我有一个数组(10,20,30),我试图找到“15”,我想得到最接近的最小范围的地址(指针),在这个例子中,这是范围(10,20)

bsearch
采用的参数之一是要搜索的元素数。所以,不要用100,而是用42来搜索

bsearch("foo", data, /*100*/42, sizeof *data, cmpfx);

更新后

我要做的是一个手册(意思是我要写代码)二进制搜索

其思想是将(剩余)数组的中间元素与下限和上限进行比较。如果较小,则在小半部分中再次搜索下限;如果大于上限,则在大半部再次搜索;否则,您将在范围内找到一个元素


第二次更新之后

要返回一对指针吗

您必须将它们包装在结构中,或者将指针的地址传递给函数。。。或者别的什么

但现在您有了一个更简单的搜索:搜索直到找到值(并返回0长度范围)或直到您即将失败。范围介于您上次查看的数组值和(具体取决于您是如何到达失败情况的)其中一侧的值之间,如果您在数组末尾,则范围为空。

函数设计用于查找与某个条件匹配的单个元素。根据手册页:

RETURN VALUE
       The bsearch() function returns a pointer to a matching  member  of  the
       array,  or  NULL  if no match is found.  If there are multiple elements
       that match the key, the element returned is unspecified.
这里的关键是,如果有多个元素与该键匹配,则返回的元素是未指定的。所以你不知道你得到的元素是第一个,最后一个,还是在这个范围的某个地方。 如果您可以更改需求,以便在A和B之间的数组中查找元素,并且可以保证数组中只有一个A和一个B,那么您可以先搜索A,然后搜索B

start = bsearch(A, array, N, sizeof(*array), compare);
end = bsearch(B, array, N, sizeof(*array), compare);

您可能需要编写自己的函数来完成所需的操作。

不,我觉得它本身并不能说明问题。请你详细说明你的问题好吗。例如,如果我想找到a和b之间的值范围(a>=x