Skip to content

Commit 723bcfb

Browse files
committed
feat : 250912-binary-search
1 parent 58907a5 commit 723bcfb

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
---
2+
title: "이진 검색 알고리즘"
3+
description: "binary search(이진 검색) 알고리즘 기록용"
4+
date: "2025-09-12T20:13:18"
5+
thumbnail: "./thumbnail.png"
6+
category: "Algorithm"
7+
tags: ["Algorithm"]
8+
---
9+
10+
# 이진 검색(Binary Search) 알고리즘
11+
12+
이진 검색 알고리즘은 **정렬**된 배열에서 특정 값을 찾는 알고리즘이에요.
13+
14+
```ts
15+
function binarySearch(arr, elem) {
16+
let start = 0
17+
let end = arr.length - 1
18+
let middle = Math.floor((start + end) / 2)
19+
20+
while (arr[middle] !== elem && start <= end) {
21+
if (elem < arr[middle]) {
22+
end = middle - 1
23+
} else {
24+
start = middle + 1
25+
}
26+
middle = Math.floor((start + end) / 2)
27+
}
28+
29+
if (arr[middle] === elem) {
30+
return middle
31+
}
32+
33+
return -1
34+
}
35+
```
36+
37+
위 코드는 이진검색 알고리즘을 구현한 자바스크립트 코드에요.
38+
39+
자바스크립트 코드를 보면 알 수 있듯이, 이진검색 알고리즘은 정렬된 배열에서 특정 값을 찾는 알고리즘이에요.
40+
41+
`start` 변수는 시작 인덱스를 나타내고, `end` 변수는 끝 인덱스를 나타내요.
42+
43+
`middle` 변수는 주어진 배열의 중간 인덱스를 나타냅니당.
44+
45+
```ts
46+
while (arr[middle] !== elem && start <= end) {
47+
if (elem < arr[middle]) {
48+
end = middle - 1
49+
} else {
50+
start = middle + 1
51+
}
52+
middle = Math.floor((start + end) / 2)
53+
}
54+
```
55+
56+
이 로직이 핵심로직이 될텐데요.
57+
58+
값을 찾거나 배열 전체를 모두 순회할(start <= end)때까지 반복하는 루프로 시작을해요.
59+
60+
찾는 값이 현재 중간값보다 작으면 끝 인덱스를 중간 인덱스 - 1로 업데이트해요.
61+
62+
왜냐면 찾는값이 중간값보다 왼쪽에 있을거니까 기존 배열의 오른쪽 반을 버리는거져.
63+
64+
반대로 찾는값이 중간값보다 크면 시작 인덱스를 중간 인덱스 + 1로 업데이트해요.
65+
66+
원리는 똑같아여. 찾는값이 중간값보다 큰 지점에 있으니까 왼쪽을 다 버리는거에여.
67+
68+
그 다음 중간값의 인덱스 업데이트하고 위 과정을 계속 반복해요.
69+
70+
```ts
71+
if (arr[middle] === elem) {
72+
return middle
73+
}
74+
75+
return -1
76+
```
77+
78+
이 후 값을 찾으면 해당 값이 있는 인덱스를 반환하구, 없으면 -1을 반환해요.

0 commit comments

Comments
 (0)