이진 탐색: 탐색 실패하는 경우 어째서 first > last인 경우가 나오나요?
341
작성한 질문수 22
17.15강 이진탐색 강의의 13:10부분입니다.
이진탐색에서 만약 탐색을 실패하는 경우 어째서 first >last라는 상황이 발생하는지 잘 모르겠습니다.
반복문을 반복해야할 상황이(탐색해야할 상황이) first <= last인 상황이라는 것을 알겠지만, first > last가 되는 상황은 어떻게 유도되는지 모르겠습니다.
#include <stdio.h>
int BSearch(int ar[], int len, int target) {
int first = 0;
int last = len - 1;
int mid;
while (first <= last) {
mid = (first + last) / 2;
if (target == ar[mid])
return mid;
else {
if (target < ar[mid])
last = mid - 1;
else
first = mid + 1;
} }
return -1;
}
int main(void)
{
int arr[] = { 1,3,5,6,7,9,11,13,15,19 };
int index; index = BSearch(arr, sizeof(arr) / sizeof(int), 3);
if (index == -1)
printf("해당값 없음\n");
else printf("타겟의 위치 : %d\n", index);
return 0;
}
답변 1
0
안녕하세요,
아래 코드가 실행되다보면
last는 mid 기준 1씩 감소
first는 mid 기준 1씩 증가할 수 있음을 보입니다.
만일 last와 first가 동일한 값을 가지고 있을 경우
그리고 아래 중 하나의 코드가 실행될 경우
first 와 last 값을 역전될 수 있습니다.
else {
if (target < ar[mid])
last = mid - 1;
else
first = mid + 1;
강의 자료
0
15
1
scanf_s 에 관해서 오류나옵니다.
0
12
2
27:15 break 출력
0
13
1
최신 엔비디아 CUDA 아키텍처에서의 결정적 변경 사항
0
14
1
자문자답- 맞는지 틀린지 확인부탁드립니다.
0
27
1
55강 파이썬에만있는 연산자들
0
30
2
17.12) access violation
0
320
1
finditembyindex 질문드립니다!
0
355
1
19:20 부분에서 질문있습니다.
0
291
1
pnode = pnode->next; 와 pnode->next = pnode;는 같은 것으로 생각해도 될까요?
0
413
2
질문. warning뜨는 이유
0
307
1
링크드 리스트 질문 드립니다.
0
222
1
함수포인터 질문드립니다
0
235
1
강의 내용 질문 드립니다!
0
386
2
노드 주소 순서 관련 질문
0
290
1
질문드립니다!
0
251
1
DeleteAllNodes 에서 질문있습니다.
0
403
5
16:30 질문입니다.
0
360
4
scanf 질문이요!!
0
260
1
12:30 의 ArrayQueue.h
0
300
2
10:10 Add front에서 질문드립니다.
1
370
1
스택 자료구조
0
258
1
변수 count의 활용에 대해 질문이 있습니다.
0
328
1
1번 실행하면 에러가 뜨는데 이유를 모르겠습니다..
0
379
2





