#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 (ar[mid] == target) {
return mid;
}
else if (ar[mid] > target) {
last = mid - 1;
}
else {
first = mid + 1;
}
} return -1;
}
int main(void) {
int arr[] = { 1,3,5,7,9 };
int idx;
idx = BSearch(arr, sizeof(arr), 5);
if (idx == -1) {
printf("탐색 실패\n");
}
else {
printf("탐색 인덱스 : %d\n", idx);
}
idx = BSearch(arr, sizeof(arr), 23);
if (idx == -1) {
printf("탐색 실패\n");
}
else {
printf("탐색 인덱스 : %d\n", idx);
}
}
뭐가 문제지??
둘다 탐색실패가뜸.
위에 메서드를 자세히봐도 잘못된건 안보이는데
범위
형아 while (first <= last) { mid = (first + last) / 2; if (target == ar[mid]) { return mid; } else if (target > ar[mid]) { first = mid + 1; } else { last = mid - 1; } } return -1;} 내가 범위도 이렇게 수정해도 다 실패가떠,..
이진 탐색에서 first와 last는 mid, mid+1 이렇게 1이 더해지거나 빼는 거 밖에 없음 ㅇㅅㅇ
반갈했을때 중간값도 탐색에 포함되었으니까 그거 거르려고 mid 에 -1 +1하는건 알겠는데 왜 컴파일하면 둘다 실패가뜨지??????
mid-1, mid+1 인 경우는 조건이 두 개인 이진 탐색에서 없어 ㅇㅅㅇ
이해를 못하겠는데.. 책에있는 예제 고대로 배낀건데도 그러네
BSearch함수 리턴값이 -1인데.. main함수 idx변수에 -1들어가서 당연히 탐색실패 뜨는거 아니야?? 아님 나도 몰?루
조건문에 탈출return 있자너 탐색실패시 return -1인데 탐색자체를 안하는건지 뭐가 오류인지 모르겠음.
BSearch함수 안에 return -1이 else문 밖으로 벗어난거임???