2011-03-24 284 views
1

bsearch对于直接搜索来说相当不错,但是如果我需要搜索范围,应该使用什么?b搜索和搜索范围?

更新

例如,如果我想找到A和B(A> = X < B)之间的值的范围。

更新

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

+2

不,我不觉得它为自己说话。你能否详细说明你的问题。 – 2011-03-24 19:07:45

+0

对不起。例如,如果我想找到a和b之间的值范围(a> = x excanoe 2011-03-24 19:15:00

回答

1

bsearch需要的参数之一是要搜索的元素的数量。因此,而不是,例如,100,使其在42搜索...

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

更新

之后我会做的是手动(意思是我” d编写代码)二分查找。

这个想法是比较(剩余)数组的中间元素与下限和上限。如果它较小,那么下限再次搜索小一半;如果大于上半部分大于上半部分搜索;否则你会在范围内找到一个元素。


第二更新

要返回一对指针的后?

你必须将它们包装在一个结构体中,或将指针的地址传递给函数......或其他东西。

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

1

bsearch()功能旨在查找匹配某个条件的单个元素。根据手册页:

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,那么您可以先搜索然后搜索B.

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

您可能需要编写自己的函数来完成您想要的功能。