Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준알고리즘
- EventListener
- 브루트포스
- 리액트
- spring
- Algorithm
- 정렬
- 백준
- AWS
- 다익스트라 알고리즘
- 알고리즘
- 라우터
- Router
- 완전탐색
- 스터디
- mysql
- url parsing
- 서버구축
- react
- 토이프로젝트
- 탐욕법
- ELB
- Spring Boot
- BFS
- nodejs
- 동적프로그래밍
- sort
- java
- EC2
- 자료구조
Archives
- Today
- Total
공부하는 블로그
Algorithm | Binary Search 본문
Binary Search
이진 탐색(Binary Search)은 오름차순으로 정렬된 배열에서 특정한 값의 위치를 찾는 알고리즘이다. 이진 탐색의 과정은 다음과 같다.
1. 배열의 중간에 위치한 임의의 값을 선택한다.
2. 선택된 값과 찾고자 하는 값 X와 비교한다.
3-1. X가 더 작으면 중간값을 기준으로 왼쪽에 있는 데이터들을 대상으로 1 - 3번을 반복한다.
3-2. X가 더 크면 중간값을 기준으로 오른족에 있는 데이터들을 대상으로 1 - 3번을 반복한다.
예시를 통해 이진 탐색을 이해해보자. {1, 5, 6, 8, 11, 15, 30, 33, 35, 48}의 배열에서 5를 찾아보자.
<1차 시도>
{1, 5, 6, 8, 11, 15, 30, 33, 35, 48}에서 11을 중간값으로 선택하고 5와 비교한다. 5 < 11 이므로 왼쪽의 데이터들을 이용하자.
<2차 시도>
{1, 5, 6, 8}에서 5를 중간값으로 선택하고 5와 비교한다. 찾으려는 데이터와 일치하므로 알고리즘을 종료한다.
Binary Search 구현(in JAVA)
public int search(int[] arr, int start, int end, int x) {
if(start > end) { // 시작 인덱스가 마지막 인덱스보다 커지면 x가 배열 내에 없는 것
return -1; // -1 return
}
int mid = (start + end) / 2; // 중간값의 인덱스
if(arr[mid] == x) { // 중간값이 x라면
return mid; // 중간값의 인덱스 return
}else if(arr[mid] > x) { // 중간값이 더 크다면
return search(arr, start, mid-1, x); // 중간값의 오른쪽에 위치한 데이터들을 대상으로 다시 search
}else { // 중간값이 더 작다면
return search(arr, mid+1, end, x); // 중간값의 왼쪽에 위치한 데이터들을 대상으로 다시 search
}
}
재귀 호출을 이용하여 이진 탐색을 구현해보았다. 반복문을 사용해서 구현하는 방법도 있다.
Reference
'알고리즘 공부' 카테고리의 다른 글
Baekjoon | Q.11047 - 동전 0 (0) | 2020.06.16 |
---|---|
Baekjoon | Q. 1912 - 연속합 (0) | 2020.06.16 |
Baekjoon | Q.11054 - 가장 긴 바이토닉 부분 수열 (0) | 2020.06.11 |
Baekjoon | Q.9251 - LCS (0) | 2020.06.11 |
Baekjoon | Q.11053 - 가장 긴 증가하는 부분 수열 (0) | 2020.06.11 |
Comments