이진탐색
2024. 11. 21. 23:17ㆍ알고리즘 & 자료구조/알고리즘
이진탐색이란?
원하는 데이터를 빠르게 찾기 위한 알고리즘
이진 탐색은 데이터가 정렬되어있는 상태에서 중앙값을 이용해서 찾고자 하는 값과 비교해가며 찾는 알고리즘
(코딩테스트에서 부분 문제로 많이 출제 됨)
기능 | 특징 | 시간복잡도 |
Target 데이터 탐색 | 중앙값 비교를 통한 대상 축소 방식 | O(logN) |
이진탐색 핵심이론
pre) 오름차순으로 정렬
- 현재 데이터 셋에서 중앙값을 설정한다
- 중앙값 > Target 값 일때, 중앙값 기준으로 왼쪽 데이터 셋 설정
- 중앙값 < Target 값 일떄, 중앙값 기준으로 오른쪽 데이터 셋 설정
- 1~3을 반복하다가, 중앙값 == Target 일때 탐색 종료
- EX) 48을 찾아라
20 | 30 | 33 | 40 | 45 | 48 | 50 |
x | x | x | x | 45 | 48 | 50 |
x | x | x | x | x | 48 (탐색 종료) | 50 |
이진탐색 구현
import java.util.Arrays;
public class App {
public static void main(String[] args) throws Exception {
int[] arr = new int[] {30,20,10,60,40,50};
Arrays.sort(arr);
int findNum = 40;
int result = binarySearch(arr, findNum);
if(result != -1){
System.out.println("찾은 수 (정렬된 인덱스 값): " + result);
}else{
System.out.println("해당 수를 찾을 수 없습니다");
}
}
private static int binarySearch(int[] arr, int findNum){
int low = 0;
int high = arr.length - 1;
int middle = 0;
while(low <= high){
middle = (low + high) / 2;
if(arr[middle] == findNum){
return middle; // 찾음
}else if (arr[middle] > findNum){
high = middle - 1; // 왼쪽 데이터 셋 찾기
}else{
low = middle + 1; // 오른쪽 데이터 셋 찾기
}
}
return -1;
}
}
'알고리즘 & 자료구조 > 알고리즘' 카테고리의 다른 글
그리디 알고리즘 (0) | 2024.11.26 |
---|---|
[BFS] 너비 우선 탐색 (1) | 2024.11.18 |
소수 찾기 (0) | 2024.11.16 |
[탐색] 깊이우선탐색 (0) | 2024.11.15 |