티스토리 뷰
이진 탐색(Binary Search)
이진 탐색(Binary Search) 란?
정렬되어 있는 배열에서 특정한 값을 찾아내는 알고리즘이다. 배열의 중간에 있는 임의의 값을 선택하여 찾고자 하는 값 X 와 비교한다. X 가 중간 값보다 작으면 중간 값을 기준으로 좌측의 데이터를 대상으로, X 가 중간 값보다 크면 우측을 대상으로 다시 탐색한다. 동일한 방법으로 다시 중간의 값을 임의로 선택하고 비교한다. 해당 값을 찾을 때까지 이 과정을 반복한다.
코드(Python)
# 반복 알고리즘
def binary_search(arr, target):
low, high = 0, len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] > target:
high = mid - 1
if arr[mid] == target:
return mid
if arr[mid] < target:
low = mid + 1
return -1
# 재귀 알고리즘
def binary_search(array=list(), target=int(), left=int(), right=int()):
"""
이진 탐색 - 재귀 함수 구현
:param array: 배열
:param target: 찾고자 하는 값
:param left: 왼쪽 인덱스
:param right: 오른쪽 인덱스
:return: target index
"""
if left > right:
return None
mid = (left + right) // 2 # 중간값. 몫
if target == array[mid]:
return mid
elif target > array[mid]:
return binary_search(array=array, target=target, left=mid + 1, right=right)
else:
return binary_search(array=array, target=target, left=left, right=mid - 1)
array=[-1, 0 , 3, 5, 9, 12] # 정렬된 리스트!
result = binary_search(array=array, target=9, left=0, right=len(array) - 1)
if result:
print(result)
else:
print("없다")
'Study > CS' 카테고리의 다른 글
[알고리즘] DFS/BFS (0) | 2022.08.28 |
---|---|
[알고리즘] 최소 공통 조상(Lowest Common Ancestor, LCA) (0) | 2022.08.27 |
[알고리즘] LIS(Longest Increasing Sequence) (0) | 2022.08.20 |
[알고리즘] 계수 정렬(Counting Sort) (0) | 2022.08.13 |
[데이터베이스] 조인(Join) (0) | 2022.08.07 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- CS 스터디
- 프로그래머스
- 코드업 기초
- CS.
- 이진탐색
- 스터디
- https
- 데이터베이스
- 연결리스트활용
- 리스트 복사
- 프로세스 주소공간
- 알고리즘
- 운영체제
- 자료구조와알고리즘 23강
- CS
- It
- 정렬
- 네트워크
- 이차 리스트
- 자바
- 자료구조
- 리스트
- 파이썬
- 보험
- 프로그래머스강의
- 리스트함축
- SW
- Greedy sort
- 리스트2
- 완전탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함