`qsort()`의 비교 함수의 인수로 전달되는 값은 정렬할 원소의 메모리 주소입니다. 그렇기 때문에 `int` 값의 배열을 정렬하고자 한다면 `const int *`가 비교 함수의 인수로 전달되는 것이고, `char *` 값의 배열을 정렬하고자 한다면 `const char **`가 비교 함수의 인수로 전달되는 것입니다.
1764번 - 듣보잡
`qsort()`의 비교 함수의 인수로 전달되는 값은 정렬할 원소의 메모리 주소입니다. 그렇기 때문에 `int` 값의 배열을 정렬하고자 한다면 `const int *`가 비교 함수의 인수로 전달되는 것이고, `char *` 값의 배열을 정렬하고자 한다면 `const char **`가 비교 함수의 인수로 전달되는 것입니다.
댓글을 작성하려면 로그인해야 합니다.
wnstjd732 1년 전 1
[[일단 1줄 요약]]
1. qsort의 compare 함수가 잘못되었을 확률이 있다!
__________________________________________________________________
안녕하세요,,, 듣보잡 한 며칠 동안 골머리 앓다가 이것저것 시도해보다 알아낸 바보 같은 사실 알려드리려 글 써봅니다
일단, 저는 문제에서 N과 M이 500,000 이상이라고 해서, 동적할당으로 접근했어요. (원래 의도한 풀이 방식도 이거같음)
그래서 배열 동적할당 해주고,,
char *lis[500000];
for(int i=0; i<N; i++){
lis[i] = (char *)calloc(21, sizeof(char));
scanf("%s", lis[i]);
}
배열 compare 함수를 선언해줬는데..!
int compare(void *first, void *second){
return strcmp((char*)first, (char*)second);
}
안되는거에요! 근데 사실은...
int compare(void *first, void *second){
return strcmp(*(char**)first, *(char**)second);
}
이렇게 하니까 해결되더라구요? (이것도 잘 모르겠음)
일단.... 왜인진 모르겠지만 일단 해결되었으니,, OK라는 생각입니다!
안되시는분은 참고해주시고 혹시 이 동작원리를 아시는분은 설명 가능할까요..?!
원본 코드 첨부합니당