[알고리즘] 이진탐색(Binary Search)

최영환·2023년 4월 12일
0

알고리즘

목록 보기
9/17

Binary Search 기본

  • 배열 내부의 데이터가 정렬되어 있어야만 사용 할 수 있는 알고리즘
  • 탐색 범위를 절반씩 좁혀가며 데이터를 탐색
  • 시작점(start), 끝점(end), 중간점(mid) 변수 사용
  • 재귀함수와 반복문을 이용하여 구현

Binary Search 과정

  • 데이터들을 정렬
  • 찾으려는 데이터 target 과 중간점 mid 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾음
  • 구할 값이 중간점 위치의 값보다 크면 우측 탐색
  • 구할 값이 중간점 위치의 값보다 작으면 좌측 탐색
  • start ≥ end 가 될 때 까지 반복

Binary Search 구현

재귀함수 구현

public static int binarySearch(int[] arr, int target, int start, int end) {
        // 종료 조건(없는 경우)
        if (start > end) {
            return -1;
        }
        int mid = (int)((start + end) / 2);
        // 찾은 경우 중간점 인덱스 반환
        if (arr[mid] == target) {
            return mid;
        }
        // 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 탐색
        else if (arr[mid] > target) {
            return binarySearch(arr, target, start, mid-1);
        }
        // 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 탐색
        else {
            return binarySearch(arr, target, mid+1, end);
        }
    }

반복문 구현

public static int binarySearch(int[] arr, int target, int start, int end) {
        while (start <= end) {
            int mid = (int)((start + end) / 2);
            // 찾은 경우 중간점 인덱스 반환
            if (arr[mid] == target) {
                return mid;
            }
            // 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 탐색
            else if (arr[mid] > target) {
                end = mid - 1;
            }
            // 중감점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 탐색
            else {
                start = mid + 1;
            }
        }
        // 없는 경우
        return -1;
    }

profile
조금 느릴게요~

0개의 댓글