sort 또는 search 에서 사용되는 function에서의 문제임을 알았는데요.
두 함수의 차이가 무엇인가요?
어찌됐든 리턴값이 양수, 0, 음수 일것이며 라이브러리 사용예제에서도 이런 식으로 사용하던데 다른 지점이 어딘지 혹시 알수있을까요
//틀렸습니다
int mycmp(const void* a, const void* b){
return (*(int*)a - *(int*)b);
}
//맞았습니다
int mycmp(const void* a, const void* b){
int c = *(int *)a, d = *(int *)b;
return c > d ? 1 : c == d ? 0 : -1;
}
gaelim 6년 전
테스트케이스는 통과하는데 어떤 부분에서 틀린지 잘모르겠습니다
그리고 예제를 조금 만들어서 넣어보아도 문제가 없는 것 같은데 제가 완전히 잘못이해하고있는것일까요?
#include <stdio.h>
#include <stdlib.h>
int binsearch(int* a, int val, int lo, int hi);
int mycmp(const void* a, const void* b){
return (*(int*)a - *(int*)b);
}
int main(){
int n, len, i, arr[100000]={0}, tmp;
scanf("%d", &len);
for (i=0; i<len; i++)
scanf("%d", &arr[i]);
qsort(arr, len, sizeof(int), mycmp);
scanf("%d", &n);
for (i=0; i<n;i++){
scanf("%d", &tmp);
printf("%d\n", binsearch(arr, tmp, 0, len-1));
}
}
int binsearch(int* a, int val, int lo, int hi){
if (hi<lo) return 0;
int mid= (lo+hi)/2;
if (a[mid]<val) return binsearch(a, val, mid+1, hi);
else if (a[mid]>val) return binsearch (a, val, lo, mid-1);
else return 1;
}