02. 이진 검색(Binary Search)

2019. 8. 21. 18:05CSE/Data Structure

* 정의

: 요소가 오름차순 또는 내림차순으로 정렬된 배열에서 검색하는 알고리즘

 배열의 중간에 위치한 키의 값과 검색할 키의 값을 비교해나가는 알고리즘

 

ex) 배열 a = {0,1,2,3,4,5,6,7,8,9,10}

    검색할 key 값 : 4

 

    1단계 : a[0~10]에서의 중간인 a[5]의 key와 검색할 key의 크기 비교

              => a[5]>검색할 key

    2단계 : a[0~4]에서의 중간인 a[2]의 key와 검색할 key의 크기 비교

              => a[2]<검색할 key

    ~~~이런식으로 값을 찾을 때 까지 반복

 

* 예외 처리

: 값이 없을 경우

 

* java로 구현한 코드

public class example_1 {

    static int binarySearch(int[] a, int n, int key){
        int pl = 0;
        int pr = n-1;
        int result = -1;

        while(pl<=pr){
            int t = (pl+pr)/2;
            if(a[t] == key){
                result = t;
                break;
            }else if(a[t]<key){
                pl = t+1;
            } else {
                pr = t-1;
            }
        }
        return result;
    }
}

 

* API

: static int binarySearch(Object[] a, Object key)

- 검색에 성공한 경우 : 해당 인덱스 반환

- 검색에 실패한 경우 : {(해당 key 값보다 크고 가장 가까운 key값을 가진 인덱스) + 1} * (-1)의 값을 반환

'CSE > Data Structure' 카테고리의 다른 글

Hash Table, ArrayList  (0) 2021.07.19
04. Queue  (0) 2020.02.02
03. Stack  (0) 2020.01.21
01. 선형 검색 (Linear Search)  (0) 2019.08.21