qsort와 bsearch는 세트로 외우면 좋을 것 같다.
둘이 사용법이 비슷한 데다가, 둘 다 PS에 유용한 함수이다.
qsort는 C언어에서 정렬할 때 매우 빈번히 쓰인다.
예제)
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b)
{
return *(int*)a - *(int*)b;
}
int main(void)
{
int arr[] = { 1, 9, 2, 8, 3, 7, 4, 6, 5 };
int N = sizeof(arr) / sizeof(int);
qsort(arr, N, sizeof(int), compare);
for (int i = 0; i < N; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
실행 결과
1 2 3 4 5 6 7 8 9
qsort와의 차이점은 검색할 때 쓰인다는 것이며,
함수의 인자 맨 앞에 찾고자 하는 키값이 들어간다는 점만 다르다.
그리고 검색 결과를 받아야 하기 때문에 결과값을 변수에 저장하면 되고,
인자와 결과값을 포인터로 해주면 된다는 점만 알면 된다.
예제)
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b)
{
return *(int*)a - *(int*)b;
}
int main(void)
{
int arr[] = { 1, 9, 2, 8, 3, 7, 4, 6, 5 };
int N = sizeof(arr) / sizeof(int);
int target1 = 1; // will be found
int target2 = 10; // won't be found
int *result1 = (int*)bsearch(&target1, arr, N, sizeof(int), compare);
int *result2 = (int*)bsearch(&target2, arr, N, sizeof(int), compare);
if (result1 != NULL)
{
printf("result1 = %d\n", *result1);
}
else
{
printf("result1 not found\n");
}
if (result2 != NULL)
{
printf("result2 = %d\n", *result2);
}
else
{
printf("result2 not found\n");
}
return 0;
}
실행 결과
result1 = 1
result2 not found