본문 바로가기
알고리즘

이진 탐색(search) 알고리즘 정리-파이썬

by 가오가이거 2020. 12. 13.
n=[1,2,3,4,7,10] #이미 정렬되어 있는 리스트에 대해 동작.

#이진 탐색
search_num = int(input('search_num:'))
f=0  #f: 리스트 검색 시작위치
l=len(n)-1  #l: 리스트 검색 마지막위치
while f<=l:#시작위치와 끝위치가 역전되지 않는한 반복
    m=(f+l)//2  #리스트 중간 위치 찾기
    if n[m]>search_num:     #중간값보다 찾는 값이 작으면 찾는 값이 중간값 앞에 있음
        l=m-1               #l를 중간 앞으로 이동
    elif n[m]<search_num:   #중간값보다 찾는 값이 크면 찾는 값이 중간값 뒤에 있음
        f=m+1               #f를 중간값 뒤로 이동
    else:                   #n[m]==search_num 인 경우로 m번째 방에서 찾음을 의미
        print('found. idx:', m) #break로 루프 빠져나옴
        break

if f>l:     #f>l은 위 루프에서 break로 종료되지 않았음을 의미하고 이는 찾는 값이 없음을 의미
    print('not found')

 

재귀적구현.

 

 

정렬리스트에서 이진탐색(빠른속도위해)으로 특정범위 수의 갯수구하기:

'알고리즘' 카테고리의 다른 글

1이 될때까지.  (0) 2022.07.02
DFS / BFS  (0) 2022.06.29
피보나치 수열 구하기-파이썬  (0) 2020.12.13
팩토리얼 구하기-파이썬  (0) 2020.12.13
정렬(sort) 알고리즘 정리-파이썬  (0) 2020.12.13