본문 바로가기
Computer Science/Algorithm

#09 이진 탐색

by 데이터현 2022. 1. 8.

정렬된 리스트에서 특정 값을 탐색할 때 순차 탐색보다 빠르게 탐색할 수 있는 알고리즘

순차 탐색 : O(n)

이진 탐색 : O(logn)

 

'''
1. start가 end보다 크다면 stop
2. mid 값을 정함
3. mid 인덱스의 값과 target이 같으면 return
4. mid 인덱스의 값보다 target이 작으면 mid 왼쪽에 있으므로 end 값을 mid -1
5. mid 인덱스의 값보다 target이 크면 mid 오른쪽에 있으므로 start 값을 mid + 1 
'''
def binary_search(arr, start, end, target):
    if start > end:
        return None
    mid = (start + end)//2
    if arr[mid] == target:
        return mid
    if arr[mid] > target:
        return binary_search(arr, start, mid-1, target)
    else :
        return binary_search(arr, mid + 1, end, target)

def binary_search_loop(arr, start, end, target):
    while start >= end:
        mid = (start+end)//2
        if arr[mid] == target:
            return mid
        if arr[mid] > target:
            end = mid - 1 
        else:
            start = mid + 1
    return None

'Computer Science > Algorithm' 카테고리의 다른 글

#10 해시 테이블 구현  (0) 2022.01.09
정렬 알고리즘 코드(python)  (0) 2022.01.08
#08 파이썬 내장 정렬(Tim Sort)  (0) 2022.01.08
#08 계수 정렬(Counting Sort)  (0) 2022.01.07
#07 기수 정렬(Radix Sort)  (0) 2022.01.07

댓글