2011-03-24 269 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); 

您可能需要編寫自己的函數來完成您想要的功能。