반응형
#include <stdlib.h> // qsort 함수가 선언된 헤더 파일
int compare(const void *a, const void *b) // 오름차순 비교 함수 구현 { int num1 = *(int *)a; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴 int num2 = *(int *)b; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴 if (num1 < num2) // a가 b보다 작을 때는 return -1; // -1 반환 if (num1 > num2) // a가 b보다 클 때는 return 1; // 1 반환 return 0; // a와 b가 같을 때는 0 반환 } 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; }
// 내림차순
int compare(const void *a, const void *b) // 내림차순 비교 함수 구현 { int num1 = *(int *)a; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴 int num2 = *(int *)b; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴 if (num1 > num2) // a가 b보다 클 때는 return -1; // -1 반환 if (num1 < num2) // a가 b보다 작을 때는 return 1; // 1 반환 return 0; // a와 b가 같을 때는 0 반환 }
// 좀더 간단하게 구현 할 경우
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; // 내림차순 }
반응형
'Study > C' 카테고리의 다른 글
Sprintf에 예제와 사용 예 (0) | 2019.01.04 |
---|---|
itoa, atoi 함수에 대하여 (0) | 2019.01.04 |
C언어 - 자연수의 조합 (0) | 2018.09.14 |
C언어 - 자판기 (0) | 2018.09.14 |
C언어 - 포인터 이해 (0) | 2018.09.07 |