qsort(퀵 정렬) 정렬하기
- 프로그래밍/C/C++
- 2018. 7. 18.
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, 5, sizeof(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 함수를 통해서 다른 데이터형도 모두 정렬할 수 있다.
퀵 정렬 구현이 어렵다면 라이브러리를 통해 쉽게 할 수가 있다.