Page 127 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 127
19 {
20 Person x[] = { /* 배열 요소는 이름의 오름차순으로 */
21 { "김영준", 179, 79 }, /* 정렬되어 있지 않으면 안 됩니다. */
22 { "박현규", 172, 63 },
23 { "이수진", 176, 52 },
24 { "최윤미", 165, 51 },
25 { "함진아", 181, 73 },
26 { "홍연의", 172, 84 },
27 };
28 int nx = sizeof(x) / sizeof(x[0]); /* 배열 x의 요소 개수 */
29 int retry;
30 puts("이름으로 검색합니다.");
31 do {
32 Person temp, *p;
33 printf("이름 : ");
34 scanf("%s", temp.name);
35 p = bsearch(&temp, x, nx, sizeof(Person),
36 (int(*)(const void *, const void *)) npcmp);
37 if(p == NULL)
38 puts("검색에 실패했습니다.");
39 else {
40 puts("검색 성공 !! 아래 요소를 찾았습니다.");
41 printf("x[%d] : %s %dcm %dkg\n",
42 (int)(p - x), p->name, p->height, p->weight);
43 }
44 printf("다시 검색할까요?(1) 예 /(0) 아니오 : ");
45 scanf("%d", &retry);
46 } while(retry == 1);
47
48 return 0;
49 }
구조체 Person은 {이름, 키, 몸무게의 멤버}로 구성되어 있습니다. Person을 자료형으로 하
는 배열이 검색 대상인 x입니다. 배열 x의 요소는 이름인 멤버 name을 기준으로 오름차순으
로 정렬하면서 초기화합니다. 요소의 순서는 이름의 알파벳 순서로 되어 있습니다.
비교 함수 npcmp는 두 문자열 x->name과 y->name의 대소 관계를 strcmp 함수를 호출하
여 비교합니다. strcmp 함수가 반환하는 값은 다음과 같습니다.
03•검색 127