[C/C++] 오름차순 정렬, 내림차순 정렬 C언어, qsort 활용
qsort 함수를 이용한 오름차순/내림차순 정렬 함수 구현을 해보자.
qsort는 quick sort의 약자로 배열을 정렬하는 함수이다.
quick sort에 대해 간단히 설명하면 원소와 다른 원소의 비교로 정렬하는 비교 정렬이다.
알고리즘적인 내용을 터치할 건 아니니 바로 함수 원형과 사용법을 알아보자.
qsort 헤더 및 원형
#include <stdlib.h>
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
qsort 함수의 인자를 쉽게 풀이해보면 다음처럼 이해하면 쉬울 것이다.
qsort(<배열의 주소>, <배열의 개수>, <데이터형의 사이즈>, <비교를 위한 콜백 함수>)
꼭 정수 배열일 필요는 없다. void 포인터를 사용하기 때문에 정수, 실수, 문자열 모두 비교가 가능하다.
그중 정수 배열에 대한 정렬만 해보겠다. 다른 데이터형 역시 기존 동작의 응용이니 크게 어려울 게 없다.
소스코드
#include <stdio.h>
#include <stdlib.h>
// 오름차순 정렬
int func_compare(const void *_a, const void *_b) {
return (*(int *)_a - *(int *)_b);
}
// 내림차순 정렬
int func_compare_r(const void *_a, const void *_b) {
return (*(int *)_b - *(int *)_a);
}
// 배열 출력 함수
void print_array(int _arr_target[], int _size) {
printf("[");
for( int idx = 0 ; idx < _size ; idx++ ) {
printf("%d", _arr_target[idx]);
if( idx + 1 < _size ) {
printf(", ");
}
}
printf("]\n");
return ;
}
int main(int _argc, char *_argv[]) {
int arr_int[] = {11, 21, 3, 43, 6, 12};
int num_arr = sizeof(arr_int) / sizeof(int);
// 오름차순 정렬 및 출럭
qsort(&arr_int, num_arr, sizeof(int), func_compare);
print_array(arr_int, num_arr);
// 내림차순 정렬
qsort(&arr_int, num_arr, sizeof(int), func_compare_r);
print_array(arr_int, num_arr);
return 0;
}
오름차순과 내림차순의 차이는 원소와 다른 원소를 비교할 때 어느 원소가 기준이 되는지 차이 밖에 없다.
결과
[3, 6, 11, 12, 21, 43] [43, 21, 12, 11, 6, 3]
qsort 함수의 자세한 내용은 man page 를 참고하자.
https://linux.die.net/man/3/qsort
끝.
'IT > programming' 카테고리의 다른 글
[C/C++] sprintf indicator 및 format 관련 (0) | 2022.01.13 |
---|---|
[C/C++] 리눅스 C언어 소켓 통신 서버, C++ socket server example (7) | 2022.01.11 |
[C/C++] readdir을 활용한 파일 목록 읽기 예제, 파일 탐색기 (0) | 2022.01.07 |
[C/C++] parse mp3 header/C언어 MP3 헤더 분석 함수 공유 (0) | 2022.01.07 |
[C/C++] ALSA PCM capture(recoding) 소스 코드 공유 (0) | 2021.12.28 |
댓글