2021. 9. 30. 01:17ㆍ알고리즘/개념 정리
이진 검색
찾을 데이터를 반씩 나눠가면서 원하는 데이터를 찾는 방식입니다.
아래는 1번지부터 10번지까지 데이터가 저장되어 있는 일차원 배열입니다.
만약 변수 key에 5를 받았다면 배열 안에 저장된 데이터에 5가 있는지 찾고 그 주소를 출력하는 것입니다.
원하는 데이터가 배열 안의 몇 번지에 위치하는지 찾는 방식인데요.
이진 검색은 처음에 말했다시피 찾을 데이터를 반씩 나눠가는데요.
전제조건으로 데이터가 오름차순이나 내림차순으로 정렬되어 있어야 이진 검색을 사용할 수 있습니다.
검색 방법은 먼저 배열 중 가운데 값을 찾습니다.
위의 배열에서는 (5) 번지가 되겠네요.
이 (5) 번지의 데이터 7 과 찾을 key 값을 비교합니다.
값을 비교해보니 찾을 값이 (5) 번지의 데이터 보다 작습니다.
그렇다면 (5) 번지 이상의 주소값은 모두 버립니다,
이제 남은 주소값 중 가운데 값을 찾습니다.
(1) ~ (4) 번지가 남아있는데요.
가운데 값을 구하는 공식은
int (첫 주소 + 마지막 주소) / 2
입니다.
(1+4) / 2 = 2.5
int 2.5 = 2
따라서 다음 검색할 주소값은 (2) 번지입니다.
값을 비교해보니 이번에는 찾을 값이 (2) 번지의 데이터 보다 큽니다.
그렇다면 (2) 번지 이하의 주소값을 모두 버립니다,
같은 방식으로 진행하면 다음에 비교할 주소값은 (3) 번지가 됩니다.
(3 + 4) / 2 = 3.5
int 3.5 = 3
(3) 번지 역시 버리게 됩니다.
같은 방식으로 (4) 번지를 검색합니다.
(4 + 4) / 2 = 4
int 4 = 4
이번에는 찾을 값과 주소값의 데이터를 비교했더니 일치합니다.
일치한다면 주소값 (4) 를 찾고 종료합니다.
'알고리즘 > 개념 정리' 카테고리의 다른 글
[알고리즘] 최대공약수, 최소공배수, 유클리드 호제법 (0) | 2021.10.04 |
---|---|
[알고리즘] 약수, 완전수, 부족수, 과잉수 (0) | 2021.10.01 |
[알고리즘] 대각선 채우기 (0) | 2021.09.29 |
[알고리즘] 마방진 (0) | 2021.09.28 |
[알고리즘] 행고정 열변화, 열고정 행변화 (0) | 2021.09.25 |