C에서 기본 제공하는 정렬함수: qsort()
- quick sort를 기반으로 함
- stdlib.h 헤더 include 해야 함
- 레퍼런스: https://en.cppreference.com/w/c/algorithm/qsort
void qsort( void *ptr, size_t count, size_t size, int (*comp)(const void *, const void *) );
- ptr: 정렬할 값들이 있는 위치
- count: 요소의 개수 (배열의)
- size: 각 요소의 size
- comp: 정렬 기준 함수
정렬 함수는 다음과 같은 형식을 가진다
int cmp(const void *a, const void *b);
- 만약 a 가 b 보다 작으면 음수의 값을 리턴하고,
- 만약 a 가 b 보다 크면 양수의 값을 리턴한다.
- 만약 a와 b가 같으면 0을 리턴한다.
사용 예시
int compare_int(void * a, void * b)
{
// void* 로 인자를 받기 때문에, 사용시에 type-casting이 필요하다
int *p1 = (int *)a;
int *p2 = (int *)b;
return *p1 - *p2;
/*
if(*p1 > *p2) return 1;
else if(*p1 < *p2) return -1;
else return 0;
*/
}
int main(void){
int a[10] = {2, 4, 1, 6, 5, 6, 9, 0, 7, 8};
qsort(a, 10, sizeof(int), compare_int); // 인자로 전달된 함수의 return 이 1일 때 swap
for(int i = 0; i<10; i++){
printf("%d ", a[i]);
}
}
+) GCC 컴파일러 사용할 때, compare_int의 paremeter들 다 const void* 형으로 선언해줘야 함.
int compare_int(const void * a, const void * b)
{
// void* 로 인자를 받기 때문에, 사용시에 type-casting이 필요하다
int *p1 = (int *)a;
int *p2 = (int *)b;
if(*p1 > *p2) return 1;
else if(*p1 < *p2) return -1;
else return 0;
}
int main(void){
int a[10] = {2, 4, 1, 6, 5, 6, 9, 0, 7, 8};
qsort(a, 10, sizeof(int), compare_int); // 인자로 전달된 함수의 return 이 1일 때 swap
for(int i = 0; i<10; i++){
printf("%d ", a[i]);
}
}
'언어 > C&C++ 응용' 카테고리의 다른 글
[C++] upper_bound, lower_bound (0) | 2021.09.11 |
---|---|
[C++] vector iterator, unique사용 (0) | 2021.09.11 |
[C++] std::sort() (0) | 2021.09.06 |
[C] 특수 입력 (0) | 2021.08.24 |
[C] Visual Studio 경고 레벨 높이기 (0) | 2021.08.11 |