Trong C, chúng ta nhận được hàm qsort (). Điều này được sử dụng để sắp xếp một số mảng bằng kỹ thuật quicksort. Trong hàm này, chúng ta phải truyền vào hàm so sánh. Hàm so sánh này nhận hai đối số. Sau đó so sánh chúng và nhận thứ tự tương đối giữa chúng. Hai đối số này là con trỏ và kiểu được đúc thành const void *. Cú pháp như sau -
int comparator(const void* p1, const void* p2);
Giá trị trả về có ba loại -
- Nhỏ hơn 0. Phần tử được trỏ bởi p1 sẽ đi trước phần tử thứ hai.
- Bằng 0. Hai giá trị giống nhau.
- Lớn hơn 0. Phần tử được trỏ bởi p1 sẽ đứng sau phần tử thứ hai
Ví dụ
#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); } }
Đầu ra
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