Programing/Algorithm

이진 탐색 (Binary Search) 설명과 JavaScript 예제

2025. 5. 22. 21:21
반응형

이진 탐색(Binary Search)은 정렬된 배열에서 중간값을 기준으로 탐색 범위를 절반으로 줄여가며 원하는 값을 찾는 고속 탐색 알고리즘입니다. 정렬된 데이터에 한해 사용할 수 있지만, 시간 복잡도가 O(log n)으로 매우 뛰어난 성능을 자랑합니다.


1. 동작 원리

  1. 배열의 중간값을 구함
  2. 중간값과 찾는 값을 비교
    • 같으면 인덱스 반환
    • 작으면 오른쪽 절반 탐색
    • 크면 왼쪽 절반 탐색
  3. 탐색 범위를 좁혀가며 반복
  4. 찾지 못하면 -1 반환

2. JavaScript 예제

function binarySearch(arr, target) {
  let left = 0;
  let right = arr.length - 1;

  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    const midVal = arr[mid];

    if (midVal === target) return mid;
    else if (midVal < target) left = mid + 1;
    else right = mid - 1;
  }

  return -1;
}

console.log(binarySearch([1, 3, 5, 7, 9, 11], 7)); // 3
console.log(binarySearch([1, 3, 5, 7, 9, 11], 4)); // -1
  • Math.floor()를 사용해 중간 인덱스를 계산
  • 반복문 안에서 좌우 범위를 줄여가며 탐색

3. 성능 분석

구분 시간 복잡도
최선의 경우 O(1)
평균 O(log n)
최악의 경우 O(log n)
  • 공간 복잡도는 O(1) (반복문 기반)
  • 재귀를 사용할 경우 O(log n)의 스택 공간이 필요함

4. 이진 탐색의 특징

  • 반드시 정렬된 배열이어야 함
  • 매우 빠른 탐색 속도 → 대규모 데이터에 적합
  • 삽입/삭제 연산이 자주 발생하는 구조에서는 효율 저하 가능

마무리

이진 탐색은 탐색 알고리즘 중 가장 널리 쓰이며 실전에서도 매우 유용한 기법입니다. 단, 정렬된 배열이 선행 조건이기 때문에 이 점을 반드시 고려해야 합니다. 상황에 따라 선형 탐색과 적절히 구분하여 사용하는 것이 중요합니다.

알고리즘 학습뿐 아니라 실무에서도 자주 사용되는 기본 탐색 방법입니다.

반응형

'Programing > Algorithm' 카테고리의 다른 글

JS 피보나치(Fibonacci)  (0) 2025.05.22
자바스크립트로 팩토리얼 계산하기: 재귀함수 vs 반복문  (0) 2025.05.22
너비 우선 탐색 (BFS: Breadth-First Search) 설명과 JavaScript 예제  (1) 2025.05.22
깊이 우선 탐색 (DFS: Depth-First Search) 설명과 JavaScript 예제  (0) 2025.05.22
선형 탐색 (Linear Search) 설명과 JavaScript 예제  (0) 2025.05.22
계수 정렬 (Counting Sort) 설명과 JavaScript 예제  (0) 2025.05.22
퀵 정렬 (Quick Sort) 설명과 JavaScript 예제  (1) 2025.05.22
병합 정렬 (Merge Sort) 설명과 JavaScript 예제  (1) 2025.05.21
'Programing/Algorithm' 카테고리의 다른 글
  • 너비 우선 탐색 (BFS: Breadth-First Search) 설명과 JavaScript 예제
  • 깊이 우선 탐색 (DFS: Depth-First Search) 설명과 JavaScript 예제
  • 선형 탐색 (Linear Search) 설명과 JavaScript 예제
  • 계수 정렬 (Counting Sort) 설명과 JavaScript 예제
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    자바스크립트유틸
    디자인패턴
    iT's MY LiFE
    js패턴
    읽고 싶은 책
    블로그
    jsp
    사고 싶은 책
    JavaScript
    Java
    IT·컴퓨터
    IT블로그
    자바
    It
    php
    위시리스트
    SQL
    IT 관련
    자바스크립트
    기초
Dongkkase
이진 탐색 (Binary Search) 설명과 JavaScript 예제
상단으로

티스토리툴바