qsort(퀵 정렬) 정렬하기

qsort(퀵 정렬) 정렬하기


이번에는 qsort 함수에 대해서 알아보자.

qsort 함수를 사용하려면 stdlib.h 파일을 include 해야한다.

함수의 원형을 보자.


1
void qsort(void *base, size_t num, size_t, width, int(__cdecl *compare)(const void *eleml, const void *elem2));
cs

▶ base       : 정렬할 배열의 번지
▶ num       : 총 배열 요소의 갯수
▶ width     : 배열 요소가 차지하는 크기, int형은 4바이트, double형은 8바이트
▶ compare  : 비교 함수, 정수값 및 문자열을 모두 비교하는 함수를 사용 가능.

함수의 원형은 이렇다. 사용법을 한번 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
int intcmp(const void *v1, const void *v2);
main()
{
    int array[5= { 5,3,1,2,4 };
 
    qsort(array, 5sizeof(array[0]), intcmp);
 
    for (int i = 0; i < 5; i++)
        printf("%d ", array[i]);
}
int intcmp(const void *v1, const void *v2) { return (*(int*)v1 - *(int*)v2); }
cs

< 출력 >

2행에서 qsort 함수를 사용하기 위해 stdlib.h 파일을 include 했다.
13행에서 v1과 v2는 모든 데이터형을 받기 위해서 void형으로 사용한다. 실제 비교시에는 비교할 데이터형으로 형 변환 해주면 된다.
정수형 변수에 대한 포인터이기 때문에 int*로 형 변환 한다.
두 값을 뺀 결과를 qsort 함수로 반환한다. 반환 값을 통해서 array배열의 값을 앞뒤로 정렬한다.
현재는 오름차순이고, 내림차순으로 설정을 하려면 cmpvalue2 - cmpvalue1 으로 설정해주면 된다.

qsort 함수를 통해서 다른 데이터형도 모두 정렬할 수 있다.
qsort는 Quick sort의 줄임말이다. 퀵 정렬버블 정렬보다 빠르다.
퀵 정렬 구현이 어렵다면 라이브러리를 통해 쉽게 할 수가 있다.




댓글

Designed by JB FACTORY