gaelim   4년 전

테스트케이스는 통과하는데 어떤 부분에서 틀린지 잘모르겠습니다

그리고 예제를 조금 만들어서 넣어보아도 문제가 없는 것 같은데 제가 완전히 잘못이해하고있는것일까요?

#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;
}

gaelim   4년 전

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;
}

댓글을 작성하려면 로그인해야 합니다.