我有一個帶有布爾值的數組。但是這些元素的順序如下: 首先去true
值,然後false
值。 例如,用布爾值對數組進行二進制搜索
boolean[] booleans = {true, true, true, true, true,
false, false, false, false, false, false};
所以,現在我們有一個布爾值排序的數組,true
值開始,如果true
值存在。
任務是找到第一個false
元素。
我創建了一個使用二進制搜索算法的搜索方法的類。
public class BinarySearch {
public static int search(boolean[] array) {
int low = 0, mid = 0;
int high = array.length - 1;
boolean booleanValue;
while (low <= high) {
mid = (low + high) >>> 1;
booleanValue = array[mid];
if (booleanValue) low = mid + 1;
else high = mid - 1;
}
return mid == array.length - 1 ? -(low + 1) : mid;
}
public static void main(String[] args) {
boolean[] booleans = {true, true, true, true, true,
false, false, false, false, false, false};
int search = search(booleans);
System.out.println("search = " + search);
}
}
它工作不正確,即有時它正在返回搜索到的一個元素。
通過迭代搜索來查找元素也不是個好主意,因爲數組的大小可能非常大,而且需要很長時間。
編輯:其實我需要在MySQL數據庫表中搜索。但是表格大小太大,查找所需的行花費很多時間,我想使用二進制搜索算法進行緊固。
編輯: MySQL表大小超過4500萬行。無論是否在列中添加索引,通過SQL查詢搜索所需的行大約需要30秒。此外,在boolean
中添加索引不起作用。
當我使用二分查找時,大約需要10毫秒。所以我想要糾正上述方法。
編輯:例如,我有稱爲「信息」的數據庫表。它有兩列「INFO」(TEXT)和「CHECKED」(BOOLEAN)。 「INFO」的初始值是false
。我會得到第一個未經檢查的信息,並從未選中開始獲得N行,然後我將檢查它們並將它們標記爲true
。過程將被重複,直到沒有未經檢查的信息。
使用調試器。 –
並搜索大小爲奇數時的錯誤?我沒有看到一個問題,所以我寫這一個;) – AxelH
@AxelH找到第一個假元素 – Vanguard