inflearn logo
강의

講義

知識共有

ホン・ジョンモのついていきながら学ぶC言語(付録)

17.15 バイナリ探索

이진 탐색: 탐색 실패하는 경우 어째서 first > last인 경우가 나오나요?

365

jo4397

投稿した質問数 22

0

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;
}

c 이진탐색 탐색실패

回答 1

0

kangminchul

안녕하세요,

아래 코드가 실행되다보면

last는 mid 기준 1씩 감소

first는 mid 기준 1씩 증가할 수 있음을 보입니다.

만일 last와 first가 동일한 값을 가지고 있을 경우

그리고 아래 중 하나의 코드가 실행될 경우

first 와 last 값을 역전될 수 있습니다.

    else {
      if (target < ar[mid])
        last = mid - 1;
      else
        first = mid + 1;

26년2회 실기기출은 언제쯤...

0

19

2

이론 공부법 요약본 버전 업데이트 문의

0

15

2

정처기 필기 준비할때 이 이론을 다시 외워도 될까요?

0

54

2

최댓값 구하기(서바이벌)에서 수식 구성에 대한 질문

0

41

2

Trace32 function 함수 조회 Makefile 수정 부분

0

30

1

조건 반복문 질문: for 문 ?

0

63

1

17.12) access violation

0

339

1

finditembyindex 질문드립니다!

0

373

1

19:20 부분에서 질문있습니다.

0

306

1

pnode = pnode->next; 와 pnode->next = pnode;는 같은 것으로 생각해도 될까요?

0

424

2

질문. warning뜨는 이유

0

325

1

링크드 리스트 질문 드립니다.

0

227

1

함수포인터 질문드립니다

0

249

1

강의 내용 질문 드립니다!

0

400

2

노드 주소 순서 관련 질문

0

299

1

질문드립니다!

0

262

1

DeleteAllNodes 에서 질문있습니다.

0

440

5

16:30 질문입니다.

0

379

4

scanf 질문이요!!

0

274

1

12:30 의 ArrayQueue.h

0

319

2

10:10 Add front에서 질문드립니다.

1

380

1

스택 자료구조

0

268

1

변수 count의 활용에 대해 질문이 있습니다.

0

342

1

1번 실행하면 에러가 뜨는데 이유를 모르겠습니다..

0

398

2