선형 탐색(Linear search)

def linear_search(array, search_value):
    for i in range(len(array)):
        if search_value == array[i]:
            return i      # 요소가 존재하면 해당 index값 출력
    return None           # 요소가 존재하지 않으면 None 출력

print(linear_search([2, 3, 5, 7, 11],2))   # 0
print(linear_search([2, 3, 5, 7, 11],0))   # None
print(linear_search([2, 3, 5, 7, 11],5))   # 2
print(linear_search([2, 3, 5, 7, 11],3))   # 1
print(linear_search([2, 3, 5, 7, 11],11))  # 4

이분 탐색(Binary search)

def binary_search(array, search_value):
		# 최초의 상한선은 배열의 첫 번째 인덱스, 하한선은 마지막 인덱스
    lower_bound = 0
    upper_bound = len(array) - 1

		# 상한선과 하한선 사이의 가운데 값을 계속해서 혹인하는 루프
    while lower_bound <= upper_bound:
        midpoint = (upper_bound + lower_bound) // 2

        value_at_midpoint = array[midpoint]

        if search_value == value_at_midpoint:
            return midpoint
        elif search_value < value_at_midpoint:
            upper_bound = midpoint - 1
        elif search_value > value_at_midpoint:
            lower_bound = midpoint + 1

print(binary_search([3,17,75,80,202],22)) # 'None' 출력
print(binary_search([3,17,75,80,202],17)) # '1' 출력

이진 탐색 vs 선형 탐색

Untitled