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