찾는 값이 없다면 : 적절한 인덱스를 음수의 형태로 넘겨줌
굳이 음수로 반환하는 것은 값이 존재하지 않다는걸 의미하기 위함 같습니다. 예외를 발생하지 않고 이렇게 다루는게 옛날 c, c++ 코드같아 재밌네요.
중복된 값이 없다면 다음과 같이 접근할 수 있습니다. 중복된 값이 있다면 배열 사이즈에 따라 결과가 달라집니다.
- 모든 값이 찾는 값보다 작다면 가장 큰 인덱스 + 1 반환 (배열 원소 추가하지 않으면 OOM)
- 찾는 값이 기존 원소들보다 작다면 0 반환
if (index < 0) {
// 배열에 값이 없는 경우, 삽입 위치 반환
return -index - 1;
}
찾는 값이 있다면 : 해당 인덱스를 반환
찾는 값이 여러 개라면 : 그 중 임의의 인덱스를 반환
int[] nums1 = {1,2,3,5,6};
System.out.println(Arrays.binarySearch(nums1, 0)); // -1
System.out.println(Arrays.binarySearch(nums1, 7)); // -6
System.out.println(Arrays.binarySearch(nums1, 4)); // -4
System.out.println(Arrays.binarySearch(nums1, 3)); // 2
int[] nums2 = {1,2,3,3,3,5,6};
System.out.println(Arrays.binarySearch(nums1, 3)); // 3 ( 가장 작은 인덱스는 2, 가장 큰 인덱스는 4)
System.out.println(Arrays.binarySearch(nums1, 2)); // 1
System.out.println(Arrays.binarySearch(nums1, 4)); // -6
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
Integer[] nums = {9, 7, 5, 3, 1};
// 내림차순으로 정렬된 배열에서 검색
int index = Arrays.binarySearch(nums, 5, Comparator.reverseOrder());
System.out.println("Index of 5: " + index); // 정상적으로 인덱스 반환
}
}