C에서는 qsort() 함수를 얻습니다. 이것은 퀵 정렬 기술을 사용하여 일부 배열을 정렬하는 데 사용됩니다. 이 함수에서 우리는 비교기 함수를 전달해야 합니다. 이 비교기 함수는 두 개의 인수를 취합니다. 그런 다음 그것들을 비교하고 그들 사이의 상대적인 순서를 얻습니다. 이 두 인수는 포인터이며 유형은 const void*로 캐스트됩니다. 구문은 아래와 같습니다 -
int comparator(const void* p1, const void* p2);
반환 값은 세 가지 유형입니다 -
- 0 미만. p1이 가리키는 요소가 두 번째 요소보다 먼저 이동합니다.
- 0과 같습니다. 두 값이 같습니다.
- 0보다 큼. p1이 가리키는 요소는 두 번째 요소 다음에 올 것입니다.
예시
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
char title[50];
int pages;
float price;
}
book;
int compareBook(book b1, book b2){
if(b1.price < b2.price){
return 0;
}
return 1;
}
main() {
int i;
book book_arr[5];
strcpy(book_arr[0].title, "C Programming");
book_arr[0].pages = 260;
book_arr[0].price = 450;
strcpy(book_arr[1].title, "DBMS Guide");
book_arr[1].pages = 850;
book_arr[1].price = 775;
strcpy(book_arr[2].title, "Learn C++");
book_arr[2].pages = 350;
book_arr[2].price = 520;
strcpy(book_arr[3].title, "Data Structures");
book_arr[3].pages = 380;
book_arr[3].price = 430;
strcpy(book_arr[4].title, "Learn Python");
book_arr[4].pages = 500;
book_arr[4].price = 300;
qsort((void*)book_arr, 5, sizeof(book_arr[0]), compareBook);
for(i = 0; i<5; i++) {
printf("%s\t\t%d\t\t%f\n",book_arr[i].title, book_arr[i].pages, book_arr[i].price);
}
} 출력
Learn Python 500 300.000000 Data Structures 380 430.000000 C Programming 260 450.000000 Learn C++ 350 520.000000 DBMS Guide 850 775.000000