#include <stdio.h>
char compare(int x, int y);
int bsearch(int a[], int n, int key);
main()
{
int list[] = { 10, 12, 33, 56, 77, 89, 90, 100 }; //list 배열에 넣어줍니다.
int n = sizeof(list) / sizeof(int); //배열에 몇개가 들어간지 구하기 위해서
int key, i;
printf("Enter a key: "); //어느 숫자를 찾을지 써줍니다.
scanf("%d", &key);
if ( (i = bsearch(list, n, key)) != -1)
printf("%d is exist at [%d]\n", key, i+1);
else
printf("%d is not exist\n", key);
} /* main */
char compare(int x, int y)
{
if (x > y) return '>';
else if (x < y) return '<';
else return '=';
} /* compare */
int bsearch(int a[], int n, int key)
{
int mid;
int left = 0, right = n-1;
while (left <= right) {
//right 가 left가 클때 돌려줍니다. left가 right가보다 더크면 그숫자는 없는겁니다.
mid = (left + right) / 2;
//mid를 구합니다. 짝수일때는 이해가되는데 홀수있때는 어떻게구할라고..??
switch ( compare(key, a[mid]) ) { //compare 함수에 내가구할수랑 mid값을 넣어줍니다.
case '>' : left = mid + 1; break;
// 리턴으로 >오면 key값이 mid값 보다 크면 left = mid + 1
case '<' : right = mid - 1; break;
// 리턴으로 <오면 key값이 mid값 작으면 left = mid - 1
case '=' : return mid; // 같으면 찾은겁니다.
}
}
return -1;
}
정렬되있는숫자중에 원하는 숫자가 몇번째 인지 찾는건데요.
제가 주석을 달아봤는데요.. 중간에 모르는게 있어서요.
if ( (i = bsearch(list, n, key)) != -1) 이함수의 의미를 모르겠네요..
char compare(int x, int y)
{
if (x > y) return '>';
else if (x < y) return '<';
else return '=';
}
그리고 중간에 이함수가있는데요 이함수가 왜 필요하죠??
bsearch함수 아래에 보면 compare 넣어주는데 그냥 아래에 써도되지않나요??
질문이 좀많네요.. 아직 부족해서 리딩도 잘못하네요..
모르는것좀 조언해주시면 감사하겠습니다..
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.