728x90
이분 탐색 이란
- 탐색 범위를 두 부분으로 분할 하면서 찾는 방식
- 처음부터 마지막까지 돌면서 탐색하는 것 보다 훨씬 빠른 장점이 있다.
시간의 복잡도
- 전체 탐색 : O(N)
- 이분 탐색 : O(logN)
진행 순서
- 데이터를 정렬해야 한다.
- 시작 값인 start, 끝 값인 end로 중간 값인 mid 를 설정해야한다.
- mid값과 내가 구하고 싶은 값을 비교한다.
- 구할 값이 mid보다 높으면 start = mid + 1
- 구할 값이 mid보다 낮으면 end = mid-1
- 이 것을 start>=end가 될 때 까지 반복한다.
Code
public static int solution(int[] arr, int M) { // arr 배열에서 M을 탐색
Arrays.sort(arr); // 정렬
int start = 0;
int end = arr.length - 1;
int mid = 0;
while (start <= end) {
mid = (start + end) / 2; // start와 end로 mid 설정
if (M == arr[mid]) {
return mid;
}else if (arr[mid] < M) {
start = mid + 1;
}else if (M < arr[mid]) {
end = mid - 1;
}
}
throw new NoSuchElementException("타겟 존재하지 않음");
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
에라토스테네스의 체 - seive of eratosthenes (0) | 2024.02.23 |
---|---|
다익스트라 알고리즘 - Dijkstra (0) | 2024.02.22 |
그래프 탐색 - DFS & BFS (0) | 2023.10.27 |
삽입 정렬 - Insertion Sort (0) | 2023.10.18 |
선택 정렬 - Selection Sort (0) | 2023.10.17 |