삽질예방/표준 API
qsort()
Kwang-sung Jun
2008. 2. 17. 22:46
qsort()는 stdlib.h에 속해 있으므로 매우 접근성도 좋고 성능도(?) 어느정도 입증되었으리라는 추측이다.
원형은
base는 대상 배열, nel은 num of element, width는 각 항목의 크기(바이트), 마지막은 비교 함수이다.
다음은 사용예이다.
결과는
deltakam@deltakam-laptop:~/netflix_prize/tmp/qsort$ ./a.out
34 1 89 9 80 75 84 23 46 28 4 69 30 92 41
1 4 9 23 28 30 34 41 46 69 75 80 84 89 92
다음은 float를 비교할 경우에 대비하여 작성한 것이며 테스트를 통과한 것이다.
원형은
#include <stdlib.h>
void qsort(void *base, size_t nel, size_t width,
int (*compar)(const void *, const void *));
void qsort(void *base, size_t nel, size_t width,
int (*compar)(const void *, const void *));
base는 대상 배열, nel은 num of element, width는 각 항목의 크기(바이트), 마지막은 비교 함수이다.
다음은 사용예이다.
int IntCmp(const void* a, const void* b)
{
return *(int*)a - *(int*)b;
}
int main(void)
{
int abc[15];
srand(time(NULL));
for (int i = 0; i < 15; i++) {
printf("%10d", abc[i] = rand() % 100);
}
qsort(abc, 15, sizeof(int), IntCmp);
printf("\n\n");
for (int i = 0; i < 15; i++) {
printf("%10d", abc[i]);
}
putchar('\n');
return 0;
}
{
return *(int*)a - *(int*)b;
}
int main(void)
{
int abc[15];
srand(time(NULL));
for (int i = 0; i < 15; i++) {
printf("%10d", abc[i] = rand() % 100);
}
qsort(abc, 15, sizeof(int), IntCmp);
printf("\n\n");
for (int i = 0; i < 15; i++) {
printf("%10d", abc[i]);
}
putchar('\n');
return 0;
}
결과는
deltakam@deltakam-laptop:~/netflix_prize/tmp/qsort$ ./a.out
34 1 89 9 80 75 84 23 46 28 4 69 30 92 41
1 4 9 23 28 30 34 41 46 69 75 80 84 89 92
다음은 float를 비교할 경우에 대비하여 작성한 것이며 테스트를 통과한 것이다.
int FloatCmp(const void* a, const void* b)
{
float det = *(float*)a < *(float*)b;
if (det < 0.0)
return -1;
else if (det > 0.0)
return 1;
else
return 0;
}
{
float det = *(float*)a < *(float*)b;
if (det < 0.0)
return -1;
else if (det > 0.0)
return 1;
else
return 0;
}