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() : 두개의 인자를 비교하여 정수의 형태로 반환한다.
'C언어 공부' 카테고리의 다른 글
| [C] time, rand, srand 함수 (0) | 2026.01.22 |
|---|---|
| C언어 기초 - 14. 동적할당의 개념 (1) | 2025.08.20 |
| C언어 기초 - 13. 구조체의 개념 (1) | 2025.08.20 |
| C언어 기초 - 12. 문자열 배열과 문자열 포인터 (& C언어의 메모리 영역) (5) | 2025.08.16 |
| C언어 기초 - 11. scanf 표준입력함수의 개념 (0) | 2025.08.16 |