CS STUDY/알고리즘
이분 탐색(Binary Search)
cha_eyoon
2024. 3. 19. 19:05
이분 탐색
개념
- 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터 탐색
- 배열 내부의 데이터가 정렬되어 있어야만 사용 가능
과정
- 데이터를 오름차순으로 정렬
- 자료의 중간값(mid)가 찾고자 하는 값(target)인지 비교
- mid 값이 target과 다르다면 대소관계를 비교해 탐색 범위를 좁히고, target과 mid 값이 같을 때까지 아래 조건에 따라 2, 3번 반복
- target이 mid보다 작으면 end를 mid 왼쪽 값으로 바꿈
- target이 mid보다 크면 start를 mid 오른쪽 값으로 바꿈
코드
def binary_search(target, data):
data.sort()
start = 0 # 맨 처음 위치
end = len(data) - 1 # 맨 마지막 위치
while start <= end:
mid = (start + end) // 2 # 중간값
if data[mid] == target:
return mid # target 위치 반환
elif data[mid] > target: # target이 작으면 왼쪽을 더 탐색
end = mid - 1
else: # target이 크면 오른쪽을 더 탐색
start = mid + 1
return
시간 복잡도
- O(logN)