컴퓨터 Info/Python - 자료구조

Python - 이진검색

붕짱이 2022. 5. 3.

이진검색

정렬이 되어 있는 자료구조에서 중앙값과 크고 작음을 이용해서 데이터를 검색하는 방식이다.

정렬이 되어있는 자료구조에서 가운데 값과 찾는값을 비교하고

또 그 값에서 중간값을 찾는 방식으로 UpDown 게임과 유사한 방식이다.

 

이진검색 예제
datas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

print(f'data : {datas}')
print(f'datas length : {len(datas)}')

searchData = int(input('찾으려는 수 입력 : '))
searchResultIdx = -1

startIdx = 0
endIdx = len(datas) - 1
midIdx = (startIdx + endIdx) // 2

midVal = datas[midIdx]

while searchData <= datas[len(datas) - 1] and searchData >= datas[0]:
    if searchData > midVal:
        startIdx = midIdx
        midIdx = (startIdx + endIdx) // 2
        midVal = datas[midIdx]
    elif searchData < midVal:
        endIdx = midIdx
        midIdx = (startIdx + endIdx) // 2
        midVal = datas[midIdx]
    elif searchData == midVal:
        searchResultIdx = midIdx
        break

if searchResultIdx == -1:
    print('찾는 값이 없습니다.')
else:
    print('찾는 값의 인덱스 : {}'.format(searchResultIdx))
내용

정렬이 되어있는 자료구조이기 때문에 첫번째 인덱스의 값과 마지막 인덱스 값을 비교하여 while문을 실행한다

가운데 값을 계속 비교하여 찾는값이 더 크면 시작 인덱스를 바꾸고

찾는값이 더 작으면 마지막 인덱스를 바꿔서 원하는 값의 인덱스를 찾는다.

 

결과
data : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
datas length : 11
찾으려는 수 입력 : 9
찾는 값의 인덱스 : 8
data : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
datas length : 11
찾으려는 수 입력 : 12
찾는 값이 없습니다.

'컴퓨터 Info > Python - 자료구조' 카테고리의 다른 글

Python - 버블정렬  (0) 2022.05.03
Python - 순위(Rank)  (0) 2022.05.03
Python - 선형검색  (0) 2022.05.02
Python - 딕셔너리  (4) 2022.05.02
Python - 튜플(List)  (0) 2022.04.29

댓글