bsearch對於直接搜索來說相當不錯,但是如果我需要搜索範圍,應該使用什麼?b搜索和搜索範圍?
更新
例如,如果我想找到A和B(A> = X < B)之間的值的範圍。
更新
範圍值可以是不相等的。 所以如果我有數組(10,20,30),我試圖找到「15」我想獲得最接近的最小範圍的地址(指針),在這個例子中這是範圍(10,20)
bsearch對於直接搜索來說相當不錯,但是如果我需要搜索範圍,應該使用什麼?b搜索和搜索範圍?
更新
例如,如果我想找到A和B(A> = X < B)之間的值的範圍。
更新
範圍值可以是不相等的。 所以如果我有數組(10,20,30),我試圖找到「15」我想獲得最接近的最小範圍的地址(指針),在這個例子中這是範圍(10,20)
bsearch
需要的參數之一是要搜索的元素的數量。因此,而不是,例如,100,使其在42搜索...
bsearch("foo", data, /*100*/42, sizeof *data, cmpfx);
更新
之後我會做的是手動(意思是我」 d編寫代碼)二分查找。
這個想法是比較(剩餘)數組的中間元素與下限和上限。如果它較小,那麼下限再次搜索小一半;如果大於上半部分大於上半部分搜索;否則你會在範圍內找到一個元素。
第二更新
要返回一對指針的後?
你必須將它們包裝在一個結構體中,或將指針的地址傳遞給函數......或其他東西。
但是現在您有了一個更簡單的搜索:搜索,直到找到值(並返回0長度範圍)或者直到您即將失敗。範圍介於上次查看的數組值之間,具體取決於您如何處理失敗情況,如果您處於數組末尾,則將值指向其中一個邊或EMPTY。
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);
您可能需要編寫自己的函數來完成您想要的功能。
不,我不覺得它爲自己說話。你能否詳細說明你的問題。 – 2011-03-24 19:07:45
對不起。例如,如果我想找到a和b之間的值範圍(a> = x excanoe 2011-03-24 19:15:00