반응형
정렬문제를 풀때는 보통 이중 반복문으로 쉽게 풀수 있으나, 배열의 크기와 숫자가 커지면 시간초과가 나온다.
그럴때는 qsort함수를 사용하면 된다.
qsort함수는 퀵 정렬 함수라고도 불린다.
stdlib.h를 헤더로 필요로 하고, qsort(정렬할 배열, 요소개수, 요소크기, 비교함수); 이렇게 구성된다.
1
|
qsort(num, sizeof(num) / sizeof(int), sizeof(int), compare);
|
cs |
비교함수는 오름차순으로 할때는
a>b일때는 return 양의 정수, a<b일때는 return 음의 정수, a == b일때는 return 0하면 된다.
1
2
3
4
5
6
7
8
9
10
|
int compare(const void *a, const void *b)
{
int num1 = *(int *)a;
int num2 = *(int *)b;
if (num1 < num2)
return -1;
if (num1 > num2)
return 1;
return 0;
}
|
cs |
이때 함수 만들때는 constvoid를 이용해 상수 지시 포인터 2개를 만들어 준다.
그리고 밑에 변수의 단위에 맞춰서 포인터를 한번 더 만들어준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b)
{
int num1 = *(int *)a;
int num2 = *(int *)b;
if (num1 < num2)
return -1;
if (num1 > num2)
return 1;
return 0;
}
int main()
{
int num[10] = { 0, };
for (int a = 0; a < 10; a++)
{
scanf("%d", &num[a]);
}
qsort(num, sizeof(num) / sizeof(int), sizeof(int), compare);
for (int i = 0; i < 10; i++)
{
printf("%d\n", num[i]);
}
return 0;
}
|
cs |
정수 10개를 호출해 오름차순으로 출력하는 코딩이다.
반응형