달력

3

« 2024/3 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2008. 2. 17. 22:46

qsort() 삽질예방/표준 API2008. 2. 17. 22:46

qsort()는 stdlib.h에 속해 있으므로 매우 접근성도 좋고 성능도(?) 어느정도 입증되었으리라는 추측이다.

원형은
       #include <stdlib.h>

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


결과는

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

:
Posted by Kwang-sung Jun