Backend/C

검색과 정렬

petitCoding 2012. 4. 12. 10:29

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. 결과 화면

 

 

 

반응형