퀵 정렬 함수

WanJu Kim·2023년 10월 7일

Function

목록 보기
5/7

stdlib.h 안에 있다.

매개 변수는 다음과 같이 받는다.

  • qsort(정렬할 배열, 요소 개수, 요소 크기, 비교 함수);
  • qsort(정렬할 메모리 주소, 요소 개수, 요소 크기, 비교 함수);

여기서 비교 함수는 이런 식으로 구현하면 된다.

int compare(const void * a,const void * b)
{
    if(*(int*)a > *(int*)b)
    {
        return -1;
    }
    else if(*(int*)a < *(int*)b)
    {
        return 1;
    }
    else return 0;
}

오름차순 정렬은 다음과 같다.

  • a < b일 때는 -1을 반환
  • a > b일 때는 1을 반환
  • a == b일 때는 0을 반환

이건 qsort를 사용하기 위한 일종의 약속이다. 내림차순은 반대로 하면 된다. 만약 a < b 일 때 1을 반환하면 반대로 내림차순 정렬이 된다.

비교 함수를 간단하게 적기.

int compare(const void *a, const void *b)
{
    return *(int *)a - *(int *)b;    // 오름차순
}
int compare(const void *a, const void *b)
{
    return *(int *)b - *(int *)a;    // 내림차순

사용 예시

int main()
{
    int numArr[10] = { 8, 4, 2, 5, 3, 7, 10, 1, 6, 9 };    // 정렬되지 않은 배열

    qsort(numArr, sizeof(numArr) / sizeof(int), sizeof(int), compare);

    for (int i = 0; i < 10; i++)
    {
        printf("%d ", numArr[i]);    // 1 2 3 4 5 6 7 8 9 10
    }

    printf("\n");

    return 0;
} 
profile
Question, Think, Select

0개의 댓글