C B搜索和搜索范围?
B搜索对于直接搜索非常好,但是如果我需要例如搜索范围,我应该使用什么呢 更新 例如,如果我想找到a和b之间的值范围(a>=x 更新 范围值不能相等。 所以,如果我有一个数组(10,20,30),我试图找到“15”,我想得到最接近的最小范围的地址(指针),在这个例子中,这是范围(10,20)C B搜索和搜索范围?,c,algorithm,search,range,bsearch,C,Algorithm,Search,Range,Bsearch,B搜索对于直接搜索非常好,但是如果我需要例如搜索范围,我应该使用什么呢 更新 例如,如果我想找到a和b之间的值范围(a>=x=x
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