2017-04-11 58 views
0

我一直在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 
+3

嗯,你不能在未排序的數組上使用二分搜索。如果你不想排序,你必須逐個檢查元素。 – TomekK

+0

提供它不起作用的示例值和完整的代碼。 –

+0

二進制搜索首先進入數組的中位數,並說好的數字即時尋找是或多或少於這個數字。如果搜索參數大於中位數,則與數組的右半部分相同,等等。你得到-1的原因是因爲它找不到它,因爲算法需要一個排序數組。搜索未排序數組的唯一方法是使用O(N)時間,因此只需使用for循環來查找它或'.contains()'方法 –

回答

0

首先

如果你想隨便找個循環

您可以使用數字

for(int i=0;i<values.length;++i) 
    { 
     if(myNumber==values[i]) 
     { 
     i=values.length; 
     foundValue=true; 
     } 
    } 
0

二分查找的主要標準是你的數組必須被排序。所以如果你想使用binarySearch找到一個元素,那麼你必須提供一個有序的數組。如果你不想排序數組,那麼你可以使用linear search而不是