qsort() এর মাধ্যমে Array Sorting
সি প্রোগ্রামিং ভাষায় qsort() ফাংশনটি একটি অ্যারে সॉर्ट করার জন্য ব্যবহৃত হয়। এটি stdlib.h হেডার ফাইলে সংজ্ঞায়িত এবং একটি সাধারণ এবং কার্যকরী সোরটিং এলগরিদম (Quicksort) ব্যবহার করে। qsort() ফাংশনটি খুব দ্রুত অ্যারে সোর্স করতে পারে এবং এটি কোনও নির্দিষ্ট সিএলএল-ভিত্তিক ফাংশন ব্যবহার করে কাস্টম সোরটিং করতে দেয়।
এখানে qsort() ফাংশনটি কীভাবে কাজ করে এবং কিভাবে এটি অ্যারে সোর্ট করতে ব্যবহৃত হয় তা বিস্তারিতভাবে আলোচনা করা হলো।
qsort() সিঙ্কট্যাক্স
void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));base: অ্যারের পয়েন্টার (অথবা যে মেমোরি ব্লকটি সেভ করা হয়েছে)।num: অ্যারে বা মেমোরির এলিমেন্টের সংখ্যা।size: প্রতিটি এলিমেন্টের আকার (বাইটে)।compar: একটি কাস্টম কম্প্যারিজন ফাংশন, যা দুটি এলিমেন্টের তুলনা করে সেগুলির ক্রম নির্ধারণ করে।
কম্প্যারিজন ফাংশন
qsort() ফাংশনটি কাস্টম কম্প্যারিজন ফাংশন ব্যবহার করে এলিমেন্টগুলি তুলনা করে। এই ফাংশনটি দুটি পয়েন্টার প্যারামিটার নেয়, এবং একটি ইতিবাচক, নেগেটিভ বা শূন্য মান রিটার্ন করে যা এলিমেন্টগুলির তুলনা নির্ধারণ করে:
- একটি নেতিবাচক মান (যেমন
-1): প্রথম পয়েন্টারটি দ্বিতীয়টির আগে থাকবে। - শূন্য মান (
0): দুটি এলিমেন্ট সমান। - একটি ইতিবাচক মান (যেমন
1): দ্বিতীয় পয়েন্টারটি প্রথমটির আগে থাকবে।
এটি কিভাবে কাজ করে
qsort()ফাংশনটি অ্যারে বা মেমোরি ব্লকটি নেয় এবংcompar()ফাংশনটি ব্যবহার করে এলিমেন্টগুলির তুলনা করে।compar()ফাংশনটি একটি কাস্টম নিয়মে এলিমেন্টগুলি তুলনা করে এবং তাদের অবস্থান ঠিক করে।
qsort() এর উদাহরণ
নীচে একটি উদাহরণ দেয়া হলো যেখানে qsort() ব্যবহার করে একটি ইন্টিজার অ্যারে সোর্ট করা হয়েছে:
উদাহরণ:
#include <stdio.h>
#include <stdlib.h>
// কাস্টম কম্প্যারিজন ফাংশন
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b); // ASCENDING অর্ডারে সোর্টিং
}
int main() {
int arr[] = {12, 45, 23, 4, 90, 56, 78, 67};
size_t n = sizeof(arr) / sizeof(arr[0]);
// অ্যারে সোর্ট করা
qsort(arr, n, sizeof(int), compare);
// সোর্ট করা অ্যারে প্রিন্ট করা
printf("Sorted array: ");
for (size_t i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}আউটপুট:
Sorted array: 4 12 23 45 56 67 78 90এখানে, qsort() ফাংশনটি arr অ্যারেটি সোর্ট করেছে এবং compare() ফাংশনটি সোরটিংয়ের জন্য ব্যবহৃত হয়েছে। compare() ফাংশনটি দুটি ইন্টিজারের পার্থক্য বের করে সেগুলিকে ASCENDING অর্ডারে সাজিয়ে দেয়।
কম্প্যারিজন ফাংশন এর উদাহরণ
১. ডিসেন্ডিং অর্ডারে সোরটিং
যদি আমরা চান যে অ্যারে ডিসেন্ডিং অর্ডারে সোর্ট হোক, তবে compare() ফাংশনটিকে একটু পরিবর্তন করতে হবে:
int compare_desc(const void *a, const void *b) {
return (*(int *)b - *(int *)a); // DESCENDING অর্ডারে সোর্টিং
}এবং qsort() ফাংশনে compare_desc() ফাংশনটি ব্যবহার করুন।
২. স্ট্রিং সোরটিং
qsort() ফাংশনটি স্ট্রিংও সোর্ট করতে পারে। নিচে একটি স্ট্রিং অ্যারে সোর্ট করার উদাহরণ দেওয়া হলো:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare_strings(const void *a, const void *b) {
return strcmp(*(const char **)a, *(const char **)b); // স্ট্রিং তুলনা
}
int main() {
const char *arr[] = {"Banana", "Apple", "Orange", "Mango", "Grapes"};
size_t n = sizeof(arr) / sizeof(arr[0]);
// স্ট্রিং অ্যারে সোর্ট করা
qsort(arr, n, sizeof(char *), compare_strings);
// সোর্ট করা স্ট্রিং অ্যারে প্রিন্ট করা
printf("Sorted array of strings: ");
for (size_t i = 0; i < n; i++) {
printf("%s ", arr[i]);
}
printf("\n");
return 0;
}আউটপুট:
Sorted array of strings: Apple Banana Grapes Mango Orangeএখানে compare_strings() ফাংশনটি strcmp() ব্যবহার করে স্ট্রিংগুলি তুলনা করে এবং সেগুলিকে ASCENDING অর্ডারে সজ্জিত করে।
সারসংক্ষেপ
qsort() ফাংশনটি একটি সাধারণ এবং শক্তিশালী ফাংশন যা অ্যারে বা মেমোরির এলিমেন্টগুলি সোরট করতে ব্যবহৃত হয়। এটি একটি কাস্টম কম্প্যারিজন ফাংশন ব্যবহার করে এলিমেন্টগুলির তুলনা করে এবং বিভিন্ন ধরণের ডেটা টাইপ (যেমন ইন্টিজার, স্ট্রিং, বা কাস্টম স্ট্রাকচার) সুরক্ষিতভাবে সোর্ট করতে পারে।
| ফাংশন | কাজ | সিঙ্কট্যাক্স |
|---|---|---|
qsort() | অ্যারে বা মেমোরি ব্লক সোরট করা | void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *)); |
compare() | কাস্টম কম্প্যারিজন ফাংশন | int compare(const void *a, const void *b); |
এটি খুবই উপকারী যখন আপনার প্রোগ্রামে ডেটা সোরট করতে হয় এবং আপনি কাস্টম তুলনা লজিক প্রয়োগ করতে চান।
Read more