Programming/C

qsort를 사용하여 배열 정렬하기

moxie2ks 2025. 1. 27. 18:01
728x90
반응형

개요

C언어에서 배열을 내림차순, 오름차순으로 정렬해야 할 때, stdlib.h의 qsort 함수를 사용하여 데이터를 정렬할 수 있다.

본 글에서는 C에서 제공하는 qsort 함수에 대해 알아보자.

사용 방법

  • #include <stdlib.h>
  • 정수형 배열을 내림차순/올림차순 할 때 사용할 콜백함수 등록.
  • qsort 함수 호출.

기본 구조

stdlib.h에서 Quick Sort 함수인 qsort 함수를 제공해준다.

void qsort (void *base, size_t nel, size_t width, int (*compare)(const void *, const void *);

  • base: 정렬하고자 하는 배열의 포인터
  • nel: 배열의 각 원소들의 총 수
  • width: 배열에서 원소 하나의 크기
  • (*compare): 비교를 수행할 함수 포인터.

예제 코드

#include <stdio.h>
#include <stdlib.h>

int compare1(void* first, void* second) {
    if (*(int*)first > *(int*)second) {
        return -1; // 내림차순의 경우 : 첫번째 값이 두번째 값보다 클경우 -1 리턴(오름차순일경우 1 리턴)
    } else if (*(int*)first < *(int*)second) {
        return 1; // 내림차순의 경우 : 두번째 값이 첫번째 값보다 클경우 1 리턴(오름차순일경우 -1 리턴)
    }
    return 0;
}

int compare2(void* first, void* second) {
    if (*(int*)first > *(int*)second) {
        return 1; // 내림차순의 경우 : 첫번째 값이 두번째 값보다 클경우 -1 리턴(오름차순일경우 1 리턴)
    } else if (*(int*)first < *(int*)second) {
        return -1; // 내림차순의 경우 : 두번째 값이 첫번째 값보다 클경우 1 리턴(오름차순일경우 -1 리턴)
    }
    return 0;
}

int main()  
{  
    int array[5] = {1,3,2,4,5};

    printf("Top down sort\n");
    qsort(array, sizeof(array)/sizeof(int), sizeof(int), compare1);
    for (int i = 0; i<sizeof(array)/sizeof(int); i++) {
        printf("%d\n", array[i]);
    }

    printf("Bottom up sort\n");
    qsort(array, sizeof(array)/sizeof(int), sizeof(int), compare2);
    for (int i = 0; i<sizeof(array)/sizeof(int); i++) {
        printf("%d\n", array[i]);
    }
}

결과

참고 문헌

[C] C언어에서 qsort 사용하기

728x90
반응형