C-তে `qsort()` ফাংশন পাওয়া যায়। এটি কুইকসোর্ট (quicksort) টেকনিক ব্যবহার করে অ্যারের সোর্টিং করে। এই ফাংশনে একটি কমপারেটর ফাংশন (comparator function) পাস করতে হয়। এই কমপারেটর ফাংশন দুটি আর্গুমেন্ট নেয়, সেগুলো তুলনা করে তাদের রিলেটিভ অর্ডার (relative order) নির্ধারণ করে। এই দুটি আর্গুমেন্ট পয়েন্টার, এবং টাইপ কাস্ট করা হয় `const void*` হিসেবে। সিনট্যাক্স:
int comparator(const void* p1, const void* p2);
রিটার্ন ভ্যালু তিন ধরনের হতে পারে:
- ০ এর চেয়ে কম: p1 দ্বারা নির্দেশিত এলিমেন্ট দ্বিতীয়টির আগে যাবে।
- ০ এর সমান: দুটি ভ্যালু সমান।
- ০ এর চেয়ে বেশি: p1 দ্বারা নির্দেশিত এলিমেন্ট দ্বিতীয়টির পরে যাবে।
উদাহরণ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char title[50];
int pages;
float price;
} book;
int compareBook(const void* a, const void* b) { // qsort-এর জন্য সঠিক সিগনেচার
book* b1 = (book*)a;
book* b2 = (book*)b;
if (b1->price < b2->price) return -1;
if (b1->price > b2->price) return 1;
return 0;
}
int 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(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