이진 탐색(binary search)은 정렬된 데이터 집합을 이분화하면서 탐색하는 방법이다.
- 정렬된 배열 또는 리스트에 적합한 고속 탐색 방법이다.
- 모든 원소는 정렬되어야 있어야 한다.
- 찾고자 하는 값이 arr[mid]인 경우 mid위치가 찾고자하는 값의 index 위치
- 찾고자 하는 값이 arr[mid]보다 작은 경우 mid 위치보다 왼쪽에 위치한다.
- 찾고자 하는 값이 arr[mid]보다 큰 경우 mid 위치보다 오른쪽에 위치한다.
소스코드
public class Ex04 {
public static void main(String[] args) {
int [] m = {1, 3, 8, 11, 15, 17, 20, 21, 25, 30, 34};
int n = 21; // 찾을 값 지정
int idx = binarySearch(m, n); // 함수
if ( idx != -1) {
System.out.printf("m[%d] 위치에 있습니다.",idx);
} else {
System.out.print("찾는 값이 없습니다.");
}
} //main
private static int binarySearch(int[] m, int n) { // 배열 m 중에서 찾을 값 n 입력 받는다.
int bottom = 0, top = m.length-1, middle;
while ( bottom <= top ) {
middle = (bottom + top) / 2;
if ( m[middle] == n ) { // 만약 중간 값이 찾고자 하는 값이라면
return middle;
} else if( m[middle] > n ){ // 찾고자 하는 값이 중간 값보다 작다면
top = middle-1;
} else if ( m[middle] < n ) { // 찾고자 하는 값이 중간 값보다 크다면
bottom = middle+1;
}
}
return -1; // 찾는 값이 없다면 -1을 가지고 return
} //binarySearch
} //class
반응형
'Backend > JAVA' 카테고리의 다른 글
[JAVA] 상속(inheritance) (0) | 2021.09.16 |
---|---|
[JAVA] 객체 지향 프로그래밍 (OOP) (0) | 2021.09.14 |
[JAVA] 2차원 배열을 1차원 배열로 변환 (0) | 2021.09.12 |
[JAVA] 배열 - 배열의 크기를 증가 시키고 요소 삽입 (0) | 2021.09.03 |
[JAVA] 주민등록번호 유효성 검사 (0) | 2021.09.01 |