C언어 표준 라이브러리에 포함된 qsort 함수는 퀵 정렬(Quick Sort) 알고리즘을 사용하여 배열을 정렬하는 데에 사용된다. 아래는 qsort 함수의 사용법에 대한 예시이다.
1. 헤더 파일 include
qsort 함수를 사용하려면 stdlib.h 헤더 파일을 포함해야 한다.
#include <stdlib.h>
2. 비교 함수 작성
qsort 함수를 사용하기 위해선 정렬을 위해 사용할 비교 함수를 만들어야 하며, 이 함수는 두 요소를 받아들여 비교한 결과를 반환해야 한다. 반환값이 음수, 0, 양수인지에 따라 정렬의 순서가 결정된다.
- 비교 함수의 반환값이 양수면, qsort 함수는 두 요소의 순서를 바꾼다.
int compare(const void *a, const void *b) {
// 비교 로직 작성
return (*(int*)a - *(int*)b);
}
위의 예시는 정수 배열을 오름차순으로 정렬하는 경우이며, 만약 내림차순으로 정렬하고 싶다면 아래와 같이 비교로직을 변경하면 된다.
return (*(int*)b - *(int*)a);
3. qsort 호출
int main() {
int arr[] = {5, 2, 9, 1, 5, 6};
int n = sizeof(arr) / sizeof(arr[0]);
// qsort 함수 호출
qsort(arr, n, sizeof(int), compare);
// 정렬된 배열 출력
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
qsort 함수의 인자는 다음과 같습니다.
void qsort (void* base, size_t n, size_t size, int (*compare)(const void*,const void*));
- base : 정렬할 배열의 시작 주소
- n : 배열의 요소 개수
- size : 각 요소의 크기 (바이트 단위)
- compare : 비교 함수
- 문자열 배열 정렬 예시
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 문자열 비교 함수
int compareString(const void *a, const void *b) {
return strcmp(*(const char**)a, *(const char**)b);
}
int main() {
const char *strArr[] = {"apple", "orange", "banana", "grape", "kiwi"};
int n = sizeof(strArr) / sizeof(strArr[0]);
qsort(strArr, n, sizeof(const char*), compareString);
printf("문자열 배열 정렬 결과: ");
for (int i = 0; i < n; i++) {
printf("%s ", strArr[i]);
}
return 0;
}
- 구조체 배열 정렬 예시
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 구조체 정의
struct Person {
char name[50];
int age;
};
// 구조체 비교 함수
int compareStruct(const void *a, const void *b) {
return ((struct Person*)a)->age - ((struct Person*)b)->age;
}
int main() {
struct Person people[] = {{"Alice", 25}, {"Bob", 20}, {"Charlie", 30}, {"David", 22}};
int n = sizeof(people) / sizeof(people[0]);
qsort(people, n, sizeof(struct Person), compareStruct);
printf("구조체 배열 정렬 결과: \n");
for (int i = 0; i < n; i++) {
printf("%s (%d years old)\n", people[i].name, people[i].age);
}
return 0;
}
'프로그래밍 > C' 카테고리의 다른 글
C] epoll 사용법 (0) | 2024.06.24 |
---|---|
__DATE__ 에서 필요한 정보를 추출하여 원하는 포맷으로 출력하기 (0) | 2024.04.17 |
윈도우 소켓 ] connect() 함수의 타임아웃은 21초 (0) | 2023.12.25 |
윈도우 소켓 ] blocking / non-blocking 소켓 사용 시 소켓함수의 리턴 조건 (0) | 2023.12.24 |
IcmpSendEcho (0) | 2023.12.23 |