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
- react
- skip ci
- #1인게임개발
- NoSQL
- Relational Database
- 불안정 정렬
- 2티어 아키텍처
- javascript
- CSS
- solidity
- ES6 모듈
- 안정 정렬
- short-circuiting
- Hybrid Blockchain
- Private Blockchain
- 명시도
- UTXO
- npm
- Factory 함수
- #유니티
- CSS Specificity
- 텍스트 가운데 정렬
- http 모듈
- SQL
- 3티어 아키텍처
- 블록체인
- Factory Functions
- CLI
- IP
- caverjs
Archives
- Today
- Total
짹뚜 스튜디오
이진 탐색 (Binary Search) 본문
이진 탐색이란 정렬된 리스트에서 탐색하는 범위를 절반으로 줄여가면서 원하는 값을 탐색하는 방법이다. 탐색 범위를 절반으로 줄여가기 때문에 시간 복잡도는 O(logN)이다.
아래 리스트에서 3을 탐색한다고 하면,
- start 값은 1 end 값은 10이 된다. 그리고 mid 값은 5가 된다. 3이 5보다 작기 때문에 mid 값인 5를 기준으로 왼쪽에 있는 값들을 이용해서 이진 탐색을 반복한다.
- start 값은 1 end 값은 4가 된다. 그리고 mid 값은 2가 된다. 3이 2보다 크기 때문에 mid 값인 2를 기준으로 오른쪽에 있는 값들을 이용해서 이진 탐색을 반복한다.
- start 값은 3 end 값은 4가 된다. 그리고 mid 값은 3이 되고 찾고하는 값이기 때문에 탐색을 종료한다
이진 탐색을 구현하는 방법에는 재귀와 반복문이 있다. (javascript)
//재귀 호출
function binarySearch(arr, target, start, end){
if(start > end){
return;
}
const mid = Math.floor((start + end) / 2);
if(arr[mid] == target){
return mid;
} else if (arr[mid] > target){
return binarySearch(arr, target, start, mid - 1);
} else if (arr[mid] < target){
return binarySearch(arr, target, mid + 1, end);
}
}
//반복문
function binarySearch(arr, target, start, end){
while(start <= end){
const mid = Math.floor((start + end) / 2);
if(arr[mid] == target){
return mid;
} else if(arr[mid] > target){
end = mid - 1;
} else if(arr[mid] < target){
start = mid + 1;
}
}
return -1; //발견 못했을 시에는 -1 을 return
}
'개발 공부 > 알고리즘' 카테고리의 다른 글
[정렬 알고리즘] #1. 안정 정렬 (Stable Sort) VS 불안정 정렬 (Unstable Sort) (0) | 2021.12.10 |
---|---|
유클리드 호제법 (0) | 2021.12.08 |
그리디(탐욕) 알고리즘 (0) | 2021.11.30 |
트리 순회 알고리즘 (0) | 2021.11.28 |
그래프 탐색 알고리즘: DFS, BFS (0) | 2021.11.25 |
Comments