정리정돈

이진탐색(Binary Search, python) 본문

알고리즘/개념

이진탐색(Binary Search, python)

XZXXZX 2021. 5. 24. 13:30
728x90
반응형

이진 탐색은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘

 

이진탐색은 탐색 범위를 절반씩 좁혀가며 데이터를 탐색한다.

 

이진탐색은 변수3개를 사용한다

- 시작점

- 끝점

- 중간점

 

중간점을 기준으로 찾고자 하는 값이 작다면 끝값을 중간점 -1 로 바꿔준다

중간점을 기준으로 찾고자 하는 값이 크다면 시작값을 중간점 + 1 로 바꿔준다.

 

이진 탐색은 한 번 확인할 때마다 확인하는 원소의 개수가 절반씩 줄어든다는 점에서 시간 복잡도가 O(logN)이다.

 

이진 탐색을 구현하는데에는 재귀를 이용하는 방법과 반복문을 통해서 구현하는 방법이 있다.

 

- 재귀함수

# 재귀 함수로 구현한 이진 탐색
def binary_search(array, target, start, end):
    if start > end:
        return None
    mid = (start + end)//2
    # 찾은 경우 중간점 인덱스 반환
    if array[mid] == target:
        return mid
    # 중간점의 값보다 찾고자하는 값이 큰 경우 중간점 기준 오른쪽 확인
    elif array[mid] < target:
        return binary_search(array, target, mid + 1, end)
    # 중간점의 값보다 찾고자하는 값이 작을 경우 중간점 기준 왼쪽 확인
    else:
        return binary_search(array, target, start, mid-1)

 

- 반복문

# 반복문으로 구현한 이진 탐색 소스코드
def binary_search(array, target, start, end):
    while start <= end:
        mid = (start+end)//2
        # 찾은 경우 중간점 인덱스 반환
        if array[mid] == target:
            return mid
        # 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
        elif array[mid] > target:
            end = mid - 1
        # 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
        else:
            start = mid + 1
    return None # 찾고자하는 값이 없을경우
728x90
반응형

'알고리즘 > 개념' 카테고리의 다른 글

그리디(Greedy)  (0) 2022.03.10
다이나믹 프로그래밍(DP)  (0) 2021.06.06
스택(Stack)과 큐(Queue)  (0) 2021.05.30
트리 자료구조  (0) 2021.05.24
계산 복잡도(시간, 공간)  (0) 2021.02.14