알고리즘/탐색

[JAVA] 이진 검색(binary search), Arrays.binarySearch

hongeeii 2021. 7. 20.
728x90
반응형

이진 검색은 요소가 오름차순 또는 내림차순으로 정렬된 배열에서 검색하는 알고리즘 입니다.

이진 검색은 선형 검색보다 좀 더 빠르게 검색할 수 있다는 장점이 있습니다.


이진 검색 예시

오름차순으로 정렬된 배열에서 39를 검색하는 과정을 생각해 보겠습니다.

먼저 배열의 중앙에 위치한 요소인 31부터 검색을 시작합니다.

검색하려는 값인 39는 중앙 요소(31)보다 큰 값입니다.

따라서 검색 대상을 뒤쪽([6]~[10])으로 좁힐 수 있습니다. 

그런 다음 검색 범위의 중앙에 요소한 위치인 68이 원하는 값인지 확인합니다. 

검색하려는 39보다 큰 값입니다. 

이제 검색해야 하는 대상은 2개 입니다. 

두 인덱스 6과 7의 중앙값은 (6+7)/2 로 6이 되므로 39와 비교해 줍니다.

원하는 값과 일치하므로 검색 성공입니다!

 

이진 검색 종료 조건

조건 1 : 배열의 중앙값과 원하는 값이 일치하는 경우

조건 2 : 검색 범위가 더 이상 없는 경우

 

이진 검색 예제

 

Arrays.binarySearch

JAVA는 배열에서 이진 검색을 하는 메소드를 표준 라이브러리로 제공합니다.

java.util.Arrays 클래스의 binarySearch 메소드는 다음과 같은 장점이 있습니다.

 

장점 1 : 이진 검색 메소드를 직접 코딩할 필요가 없다.

          ★ 오름차순으로 정렬된 배열 a를 가정하고, 키 값이 key 인 요소를 이진 검색하는 메소드 입니다.

장점 2 : 모든 자료형 배열에서 검색할 수 있다.

          ★ binarySearch 메소드는 자료형에 따라 오버로딩 되어있습니다.

     

검색에 성공한 경우

key와 일치하는 요소의 인덱스를 반환합니다. 

만약 일치하는 요소가 여러 개 있다면 무작위의 인덱스를 반환합니다.

 

검색에 실패한 경우

음수의 숫자를 반환합니다.

 

Arrays.binarySearch 예제

  • 기본 자료형 배열에서 binarySearch 메소드로 검색하기

  • 객체의 배열에서 binarySearch 메소드로 검색하기

 


이상으로 이진 검색(binary search)에 대해 알아보았습니다.

 

728x90
반응형

'알고리즘 > 탐색' 카테고리의 다른 글

[JAVA] 이.코.테 ( 탐색 ) - 부품 찾기  (0) 2021.08.11
[JAVA] 배열의 선형검색, 보초법  (0) 2021.07.20

추천 글