Page 242 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 242

qsort 함수 사용해 정렬하기

                   03장에서 살펴본 표준 라이브러리인 bsearch 함수와 마찬가지로 표준 라이브러리에서 제공
                   하는 qsort 함수에 대해 살펴보겠습니다.


                             qsort 함수
                    헤더       #include <stdlib.h>
                    형식       void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));

                             qsort 함수의 인자로 전달하는 값은 총 4개입니다. base는 정렬할 배열을 가리키고, nmemb는 요소의
                             개수입니다. size는 배열 요소의 크기이고 마지막으로 전달하는 함수의 인자 compar는 비교 함수입니다.
                             즉, compar에 지정한 비교 함수를 사용하여 정렬하게 됩니다. compar에 전달할 비교 함수는 다음과 같
                    해설
                             은 기능을 할 수 있도록 직접 작성해야 합니다. 첫 번째 인수가 두 번째 인수보다 작은 경우에는 0보다 작
                             은 값을, 같을 경우에는 0을, 클 경우에는 0보다 큰 정수를 반환합니다. 비교하는 두 요소가 같을 경우에는
                             순서를 다시 배치하지 않습니다.



                   qsort 함수는 bsearch 함수와 마찬가지로 int형이나 double형 등의 배열뿐만 아니라 구조체
                   형 배열 등의 모든 자료형의 배열에 적용할 수 있습니다. 함수 이름은 퀵 정렬에서 따왔지만
                   내부적으로 항상 퀵 정렬 알고리즘을 사용하지는 않습니다(함수 이름일 뿐입니다).


                   실습 6-11은 qsort 함수를 사용하여 정렬하는 프로그램입니다. int형 배열의 값을 읽어 오름
                   차순으로 정렬한 뒤 출력합니다. 다시 한 번 qsort 함수에 전달하는 인수를 설명하면 처음부

                   터 배열의 첫 번째 요소에 대한 포인터, 요소의 개수, 요소의 크기, 비교 함수에 대한 포인터입
                   니다. qsort 함수가 사용된 부분을 주의 깊게 살펴보세요.


                   비교 함수는 아래의 값을 반환하는 함수이며 직접 작성해야 합니다.


                     비교 함수의 반환값
                     1. 첫 번째 인수가 가리키는 값이 더 작은 경우 음수 값(-1)을 반환합니다.
                     2. 첫 번째 인수가 가리키는 값과 두 번째 인수가 가리키는 값이 같은 경우 0을 반환합니다.
                     3. 첫 번째 인수가 가리키는 값이 더 큰 경우 양수 값(1)을 반환합니다.




                     실습 6-11                                                 •완성 파일 chap06/qsort1.c
                     01  /* qsort 함수를 사용하여 정수 배열을 오름차순으로 정렬 */
                     02  #include <stdio.h>
                     03  #include <stdlib.h>
                     04
                     05  /*--- int형 비교 함수(오름차순 정렬에 사용) ---*/



                   242   C 알고리즘
   237   238   239   240   241   242   243   244   245   246   247