qsort - Quick sort in c
2022. 7. 5. 13:07ㆍSTUDY/알고리즘
반응형
stdlib.h 에서 지원하는 qsort 가 있다고한다..
난 여태... 뭘 배운거죠 ...?
허허...
#include <stdio.h>
#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;
}
qsort 를 사용하기전에, compare 함수를 만들어야한다.
오름차수 정렬 조건은 다음과 같다.
* a < b 일 때는, -1을 반환
* a > b 일 때는, 1을 반환
* a == b 일 때는, 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 반환
}
오름차순 compare 함수이다.
더 간단하게 하려면,
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; // 내림차순
}
즉, 꼭 return 값이 -1, 1, 0 일 필요는 없다!
값이 같을 때만 0이면 되고, 값이 크거나 작을 때는 음수와 양수를 반환하면 된다. !
728x90
반응형
'STUDY > 알고리즘' 카테고리의 다른 글
Adjacency list in C (0) | 2022.07.30 |
---|---|
About Graph & BFS,DFS (0) | 2022.07.18 |
백준 2579 - 계단 오르기 (0) | 2022.07.03 |
백준 1463번 - 1로 만들기 (0) | 2022.07.02 |
백준 2748 - fibonacci 2 (1) | 2022.07.02 |