qsort
qsort
이번 목표는 qsort 함수 사용법을 공부하는 것이다. qsort는 C언어에서 제공하는 정렬 라이브러리 함수이고 quick sort를 이용한다
기본 구조
void qsort(void *base, size_t nel, size_t width, int(*compare)(const void*, const void*));
-
base : 정렬할 배열의 포인터
-
nel : 배열의 각 원소들의 총 수
-
width : 배열에서 원소하나의 크기
-
(*compare) : 비교를 수행할 함수 포인터
compare 함수
비교함수 내부에는 1,0,-1 중 하나를 반환해야한다. 만약 오름차순으로 정렬하고 싶으면 비교함수 내부에서 첫번째가 두번째보다 클 때 1을, 작을 때 -1, 같을 때 0을 반환하면 된다.
구현
#include <stdio.h>
#include <stdlib.h>
int compare (const void* first, const void* second)
{
int a = *(int*) first; //포인터를 int형으로 변환
int b = *(int*) second;
if (a > b)
return 1;
else if (a < b)
return -1;
else
return 0;
}
int main()
{
int arr[] = {5, 7, 6, 8, 9, 1, 3, 2, 4, 10};
int array_size = sizeof(arr) / sizeof(int);
int i;
printf("before qsort \n")
for (i = 0; i < array_size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
qsort(arr, array_size, sizeof(int), compare);
printf("after qsort \n")
for (i = 0; i < array_size; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
결과
before qsort
5 7 6 8 9 1 3 2 4 10
after qsort
1 2 3 4 5 6 7 8 9 10
댓글남기기