C언어의 퀵 정렬 함수는 stdlib.h에 정의되어있다.
void qsort(void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar)
qsort 함수의 매개변수는 순서대로 배열의 시작지점의 포인터, 원소의 개수, 원소의 자료형의 크기, 두 값을 비교하는 함수이고 함수를 실행하면 배열이 정렬된다.
이 함수를 사용하려면 두 대상을 비교하는 함수를 따로 만들어야 한다. 비교함수의 반환값이 첫번째 대상이 두번째 대상보다 클 때 양의 정수 작을 때 음의 정수를 반환하게 만들면 배열이 오름차순으로 정렬하게 되고 반대로 하면 내림차순으로 정렬 된다.
이때 비교함수의 매개변수는 비교하는 대상의 자료형에 관계없이 void*야 한다.
#include <stdio.h>
#include <stdlib.h>
int compa(const void* a,const void* b){
if (*(int*)a > *(int*)b)
return 1;
else
return -1;
}
int main(void){
int i;
int table[7] ={2,3,-5,7,-3,3,12};
qsort(table,7,sizeof(int),compa);
for(i=0;i<7;i++){
printf("%d\n",table[i]);
}
}
출력
-5
-3
2
3
3
7
12
https://en.cppreference.com/w/c/algorithm/qsort
Reply by Email