我一直在int []數組上使用binarySearch方法來查找特定int值的偏移量,但有時它可以正常工作,並且有時會返回一個負數。Java Array二進制搜索 - 負輸出,不想排序
在其他問題中,建議我先排序數組,但我不想這樣做,因爲它們的順序必須保留。
System.out.println("Index of last point: "+validFlag+" "+Arrays.binarySearch(validFlags,validFlag));
我覺得奇怪的是,這在某些情況下有效,而不是在其他情況下,在其他情況下,我可以向你保證int值在數組中! 建議?
下面是一些程序輸出控制檯:使用Arrays.sort()方法,你必須真的排序
Possible flags: 26317584
Current flag: 6
Index of last point: 6 -7
嗯,你不能在未排序的數組上使用二分搜索。如果你不想排序,你必須逐個檢查元素。 – TomekK
提供它不起作用的示例值和完整的代碼。 –
二進制搜索首先進入數組的中位數,並說好的數字即時尋找是或多或少於這個數字。如果搜索參數大於中位數,則與數組的右半部分相同,等等。你得到-1的原因是因爲它找不到它,因爲算法需要一個排序數組。搜索未排序數組的唯一方法是使用O(N)時間,因此只需使用for循環來查找它或'.contains()'方法 –