C언어를 이용한 Binary search가 않되요
조회수 726회
include
int arr[5] = { 0 };
int main() { int n = 0, q = 0, x = 0; int a = 0; int r = 0, l = 0; int i = 4;
n = 5;
r = (n - 1);
q = 10;
for (int j = (n - 1); j>(-1); j--)
{
arr[j] = 10 + 10 * i;
printf("arr[%d] = %d\n", j, arr[j]);
i--;
}
for (int k = 0; k<q; k++)
{
x = 10 + 10 * k;
printf("x=%d ", x);
while (r >= l)
{
int m = ((l + r) / 2);
if (x == arr[m])
{
a = 1;
break;
}
if (x < arr[m])
r = m - 1;
else
l = m + 1;
}
if (a == 1)
printf("YES\n");
else
printf("NO\n");
a = 0;
}
return 0;
}
다음과 같은 소스코드를 사용했더니 30부터 NO가 출력이 됩니다ㅜㅜ 이유를 알 수 있을 까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
2번째 for loopㅇ서
r
과l
이 초기화되지 않네요.#include <stdio.h> int arr[5] = { 0 }; int main() { int n = 5, q = 10; int a = 0; for(int i=0; i<n; i++) { arr[i] = 10 + 10 * i; } for (int k = 0; k < q; k++) { int r = n-1, l = 0; // for문 처음에 r, l 초기화해줌. int x = 10 + 10 * k; printf("x=%d ", x); while (r >= l) { int m = ((l + r) / 2); if (x == arr[m]) { a = 1; break; } if (x < arr[m]) r = m; else l = m + 1; } if (a == 1) printf("YES\n"); else printf("NO\n"); a = 0; } return 0; }
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력