Add Util.linearSearch

PiperOrigin-RevId: 281037183
This commit is contained in:
aquilescanta 2019-11-18 11:50:50 +00:00 committed by Oliver Woodman
parent 734b4ad9c8
commit 82b218607f

View File

@ -713,11 +713,29 @@ public final class Util {
return result; return result;
} }
/**
* Returns the index of the first occurrence of {@code value} in {@code array}, or {@link
* C#INDEX_UNSET} if {@code value} is not contained in {@code array}.
*
* @param array The array to search.
* @param value The value to search for.
* @return The index of the first occurrence of value in {@code array}, or {@link C#INDEX_UNSET}
* if {@code value} is not contained in {@code array}.
*/
public static int linearSearch(int[] array, int value) {
for (int i = 0; i < array.length; i++) {
if (array[i] == value) {
return i;
}
}
return C.INDEX_UNSET;
}
/** /**
* Returns the index of the largest element in {@code array} that is less than (or optionally * Returns the index of the largest element in {@code array} that is less than (or optionally
* equal to) a specified {@code value}. * equal to) a specified {@code value}.
* <p> *
* The search is performed using a binary search algorithm, so the array must be sorted. If the * <p>The search is performed using a binary search algorithm, so the array must be sorted. If the
* array contains multiple elements equal to {@code value} and {@code inclusive} is true, the * array contains multiple elements equal to {@code value} and {@code inclusive} is true, the
* index of the first one will be returned. * index of the first one will be returned.
* *
@ -731,8 +749,8 @@ public final class Util {
* @return The index of the largest element in {@code array} that is less than (or optionally * @return The index of the largest element in {@code array} that is less than (or optionally
* equal to) {@code value}. * equal to) {@code value}.
*/ */
public static int binarySearchFloor(int[] array, int value, boolean inclusive, public static int binarySearchFloor(
boolean stayInBounds) { int[] array, int value, boolean inclusive, boolean stayInBounds) {
int index = Arrays.binarySearch(array, value); int index = Arrays.binarySearch(array, value);
if (index < 0) { if (index < 0) {
index = -(index + 2); index = -(index + 2);