1. bsearch()를 이용한 검색
<함수원형>
void *bsearch(void *key, void *base, size_t num, size_t width,
int(*cmp)(void *element1, void *element2))
key : 검색하기 원하는 데이터 항목에 대한 포인터
base : 검색을 수행할 배열의 첫 번째 요소에 대한 포인터
num : 배열에 있는 요소의 수
width : 바이트 단위로 표현되는 각 요소의 크기
size_t : sizeof()연산자가 돌려주는 데이터형을 뜻하는 것으로 unsigned형
cmp : 비교 함수에 대한 포인터
2. qsort()를 사용한 정렬
<함수원형>
void qsort(void *base, size_t num, size_t size,
int (*cmp)(void *element1, void *element2));
base : 배열의 첫 번째 요소
num : 배열에 포함되어 있는 요소의 개수
size : 바이트 단위로 표현되는 한 배열 요소의 크기
cmp : 비교 함수에 대한 포인터
3. 특정 값에 대한 qsort()와 bsearch()함수의 사용 예
1 : #include <stdio.h>
2 : #include <stdlib.h>
3 : #define MAX 20
4 : int intcmp(const void *v1, const void *v2);
5 : main()
6 : {
7 : int arr[MAX], count, key, *ptr;
8 : printf("Enter %d integer values ; press Enter after each.\n", MAX);
9 : for(count = 0; count< MAX; count++)
10 : scanf("%d", &arr[count]);
11 : puts("Press Enter to sort the values.");
12 : getc(stdin);
13 : qsort(arr, MAX, sizeof(arr[0]), intcmp);
14 : for(count = 0; count < MAX; count++)
15 : printf("\nrr[%d] = %d.", count, arr[count]);
16 : puts("\nPress Enter to contiune.");
17 : getc(stdin);
18 : printf("Enter a value to search for: ");
19 : scanf("%d", &key);
20 : ptr = (int*)bsearch(&key, arr, MAX, sizeof(arr[0]), intcmp);
21 : if(ptr != NULL)
22 : printf("%dfound at arr[%d].", key, (ptr-arr));
23 : else
24 : printf("%d not fount.", key);
25 : return 0;
26 : }
27 : int intcmp(const void *v1, const void *v2){
28 : return (*(int*)v1 - *(int*)v2);
29 : }
4. 결과 화면
'Backend > C' 카테고리의 다른 글
수치 연산 함수 사용하기 (0) | 2012.04.12 |
---|---|
매크로에서 # 연산자의 사용 (0) | 2012.04.12 |
문자열 비교를 위한 strcmp (0) | 2012.04.12 |
디스크 파일 사용하기 -여러 가지 함수들 (0) | 2012.04.12 |
fscanf사용하여 형식화된 데이터 읽기 (0) | 2012.04.12 |