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 넣어주는데 그냥 아래에 써도되지않나요?? 질문이 좀많네요.. 아직 부족해서 리딩도 잘못하네요.. 모르는것좀 조언해주시면 감사하겠습니다..