[C/C++] qsort, bsearch 사용법

pikamon·2023년 8월 15일
0

C/C++

목록 보기
8/9

qsort와 bsearch는 세트로 외우면 좋을 것 같다.

둘이 사용법이 비슷한 데다가, 둘 다 PS에 유용한 함수이다.

1. qsort

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

2. bsearch

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
profile
개발자입니당 *^^* 깃허브 https://github.com/pikamonvvs

0개의 댓글