C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
And: Value 8 is located at index 7. BinarySearch correctly located this value in the array.
Java program that uses Arrays.binarySearch
import java.util.Arrays;
public class Program {
public static void main(String[] args) {
// A presorted array.
int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Find value 8.
int index = Arrays.binarySearch(values, 8);
// Display result.
System.out.println("Index = " + index);
System.out.println("Value = " + values[index]);
}
}
Output
Index = 7
Value = 8
Java program that cannot locate element
import java.util.Arrays;
public class Program {
public static void main(String[] args) {
int[] values = { 0, 2, 4, 8 };
// Value does not occur.
int index = Arrays.binarySearch(values, 400);
System.out.println(index);
}
}
Output
-5
Version 1: In this version of the code we use Arrays.binarySearch to find an element in a 100-element int array.
Version 2: Here we use a simple for-loop that iterates in order from low to high indexes to search the array.
Result: For short, 10 element int array, a simple for-loop with a linear search is faster. BinarySearch can make programs slower.
Java program that times Arrays.binarySearch
import java.util.Arrays;
public class Program {
public static void main(String[] args) throws Exception {
// Create 100 element array.
int[] values = new int[100];
for (int i = 0; i < 100; i++) {
values[i] = i;
}
long t1 = System.currentTimeMillis();
// Version 1: search with binarySearch.
for (int i = 0; i < 1000000; i++) {
int index = Arrays.binarySearch(values, 80);
if (index != 80) {
throw new Exception();
}
}
long t2 = System.currentTimeMillis();
// Version 2: search with for-loop (linear).
for (int i = 0; i < 1000000; i++) {
int index = -1;
for (int j = 0; j < values.length; j++) {
if (values[j] == 80) {
index = j;
break;
}
}
if (index != 80) {
throw new Exception();
}
}
long t3 = System.currentTimeMillis();
// ... Times.
System.out.println(t2 - t1);
System.out.println(t3 - t2);
}
}
Output
23 ms, Arrays.binarySearch
113 ms, for-loop (linear search)