[java] 자바를 활용한 이진 탐색 알고리즘

이진 탐색(Binary Search)은 정렬된 배열에서 원하는 항목을 찾는 데 사용되는 효율적인 알고리즘입니다. 정렬된 배열에서 중간 항목을 선택하고 찾고자 하는 값과 비교하여 다음 검색 위치를 결정하는 방식으로 동작합니다.

이진 탐색 알고리즘의 원리

이진 탐색 알고리즘은 다음과 같은 단계로 동작합니다:

  1. 배열의 중간 요소를 선택합니다.
  2. 중간 요소와 찾고자 하는 값과 비교합니다.
  3. 중간 요소가 찾고자 하는 값과 일치하면 해당 요소의 인덱스를 반환합니다.
  4. 중간 요소가 찾고자 하는 값보다 작다면, 중간 요소의 오른쪽에만 존재할 수 있으므로, 배열의 오른쪽 반만 다시 탐색합니다.
  5. 중간 요소가 찾고자 하는 값보다 크다면, 중간 요소의 왼쪽에만 존재할 수 있으므로, 배열의 왼쪽 반만 다시 탐색합니다.
  6. 탐색 범위가 축소될 때까지 위의 과정을 반복합니다.

자바로 이진 탐색 알고리즘 구현하기

다음은 자바를 사용하여 정렬된 배열에서 이진 탐색 알고리즘을 구현하는 예시 코드입니다.

public class BinarySearch {
    public static int binarySearch(int[] arr, int target) {
        int left = 0;
        int right = arr.length - 1;

        while (left <= right) {
            int mid = left + (right - left) / 2;

            if (arr[mid] == target) {
                return mid;
            }

            if (arr[mid] < target) {
                left = mid + 1;
            }

            if (arr[mid] > target) {
                right = mid - 1;
            }
        }

        return -1; // 찾고자 하는 값이 배열에 존재하지 않을 경우
    }

    public static void main(String[] args) {
        int[] arr = {2, 3, 5, 8, 10, 15, 18};
        int target = 8;
        int result = binarySearch(arr, target);
        if (result == -1) {
            System.out.println("찾고자 하는 값이 배열에 존재하지 않습니다.");
        } else {
            System.out.println("찾고자 하는 값의 인덱스: " + result);
        }
    }
}

위의 예시 코드에서 binarySearch 메소드는 이진 탐색 알고리즘을 구현한 것으로, 주어진 배열에서 목표 값의 인덱스를 반환하거나 값이 배열에 존재하지 않을 경우 -1을 반환합니다.

이진 탐색 알고리즘은 탐색 범위를 반으로 줄여가며 빠르게 원하는 항목을 찾을 수 있는 장점이 있습니다. 이를 토대로 개발시에는 데이터 검색에 이 알고리즘을 적용하여 검색 속도를 향상시킬 수 있습니다.

이진 탐색 알고리즘에 대한 보다 자세한 내용은 GeeksforGeeks에서 확인할 수 있습니다.