C언어 공부

c언어 정렬 함수 qsort 함수

Client Side 2025. 9. 22. 12:58

qsort 함수는 stdlib.h에 들어있는 범용 정렬 함수이다.

퀵 정렬(Quick Sort) 알고리즘을 기반으로 하고 있어서 대량의 데이터를 효율적으로 정렬할 수 있다는 장점이 있다. 

정수, 실수, 문자열은 물론이고 복잡한 구조체까지 다양한 형태의 데이터를 다룰 수 있는 아주 유용한 함수이다.

 

qsort 함수의 사용법

void qsort(void *base, size_t num, size_t size, int (*compare)(const void *, const void *));

 

1. void *base : 어떤 배열을 정렬할 것인가
정렬하고 싶은 배열의 시작 주소를 넘겨주면 된다.

 

2. size_t num : 배열 요소의 갯수


3. size_t size :  하나의 요소의 크기

 

4. int (*compare)(const void *, const void *) : 정렬 기준

이게 바로 qsort의 핵심이자 우리가 직접 만들어줘야 하는 비교 함수다. 

qsort는 우리가 넘겨준 이 compare 함수를 이용해서 두 요소를 비교하고, 그 결과에 따라 위치를 바꾸면서 정렬을 진행한다.

이 함수는 항상 두 개의 const void * 타입 인자를 받고 int를 반환해야 한다.

 

int compare(const void *a, const void *b) {
    // a와 b를 적절한 타입으로 형 변환해서 비교해야 한다
    // 예: int 배열을 정렬할 때는 (const int*)a 와 (const int*)b
    
    // a가 b보다 작으면 음수 리턴 (오름차순)
    // a가 b보다 크면 양수 리턴 (오름차순)
    // a와 b가 같으면 0 리턴
    
    // 오름차순 예시: return (*(int*)a - *(int*)b);
    // 내림차순 예시: return (*(int*)b - *(int*)a);
}

 

 

*  strcmp() : 두개의 인자를 비교하여 정수의 형태로 반환한다.