সি প্রোগ্রামিংয়ে কাস্টম সর্টিং এবং কাস্টম সার্চিং টেকনিক্স ব্যবহার করে আপনি নির্দিষ্ট শর্ত অনুযায়ী ডেটা সর্ট এবং সার্চ করতে পারেন। সাধারণ সর্টিং এবং সার্চিং ফাংশন যেমন qsort()
এবং bsearch()
ব্যবহার করা হলেও, কখনও কখনও আপনার নির্দিষ্ট কাস্টম শর্তে ডেটা সর্ট বা সার্চ করতে হতে পারে। সেক্ষেত্রে, কাস্টম কম্পারেটর ফাংশন এবং কাস্টম সার্চ পদ্ধতি ব্যবহার করতে পারেন।
নিচে কাস্টম সর্টিং এবং সার্চিং টেকনিক্সের বিস্তারিত আলোচনা করা হলো।
সি ভাষায় qsort()
ফাংশনটি জেনেরিক সর্টিং ফাংশন যা কাস্টম কম্পারেটর ফাংশন ব্যবহার করে কোনো অ্যারের এলিমেন্টকে সর্ট করতে সহায়ক। আপনি যখন নির্দিষ্ট কোনো শর্তে সর্ট করতে চান, তখন একটি কাস্টম কম্পারেটর ফাংশন তৈরি করতে পারেন।
ধরা যাক, আমরা একটি অ্যারে সর্ট করতে চাই, তবে সর্টিংটি হবে উল্টোভাবে অর্থাৎ বড় সংখ্যাগুলি আগে আসবে (ডিসেনডিং অর্ডার)।
int compare(const void *a, const void *b);
#include <stdio.h>
#include <stdlib.h>
// কাস্টম কম্পারেটর ফাংশন
int compare(const void *a, const void *b) {
return (*(int *)b - *(int *)a); // Descending order (বড় থেকে ছোট)
}
int main() {
int arr[] = {12, 5, 3, 8, 1};
int n = sizeof(arr) / sizeof(arr[0]);
// qsort ব্যবহার করে সর্ট করা
qsort(arr, n, sizeof(int), compare);
printf("Sorted array in descending order: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
Output:Sorted array in descending order: 12 8 5 3 1
এখানে
compare()
ফাংশনটিqsort()
ফাংশনের জন্য কাস্টম কম্পারেটর হিসেবে কাজ করেছে এবং সংখ্যাগুলিকে বড় থেকে ছোটে সর্ট করা হয়েছে।
ধরা যাক, আমাদের একটি স্ট্রিং এর অ্যারে আছে এবং আমরা স্ট্রিংগুলিকে তাদের দৈর্ঘ্য অনুযায়ী সর্ট করতে চাই (ছোট থেকে বড় বা বড় থেকে ছোট)। এখানে strlen()
ফাংশন ব্যবহার করতে হবে।
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// কাস্টম কম্পারেটর ফাংশন
int compare(const void *a, const void *b) {
return strlen((const char *)a) - strlen((const char *)b); // String length comparison
}
int main() {
char *arr[] = {"apple", "kiwi", "banana", "grape"};
int n = sizeof(arr) / sizeof(arr[0]);
// qsort ব্যবহার করে সর্ট করা
qsort(arr, n, sizeof(char *), compare);
printf("Sorted array based on string length: ");
for (int i = 0; i < n; i++) {
printf("%s ", arr[i]);
}
return 0;
}
Output:Sorted array based on string length: kiwi grape apple banana
এখানে স্ট্রিংগুলির দৈর্ঘ্য অনুযায়ী তাদের সর্ট করা হয়েছে, ছোট স্ট্রিং প্রথমে আসছে।
যখন আপনি একটি অ্যারেতে কাস্টম সার্চ করতে চান, তখন আপনি bsearch()
ফাংশনের পরিবর্তে নিজের সার্চ ফাংশন তৈরি করতে পারেন। এটি সাধারণত তখনই দরকার হয় যখন সার্চিংয়ের শর্ত কাস্টম হয় (যেমন, কোন নির্দিষ্ট বৈশিষ্ট্য অনুযায়ী সার্চ করা)।
ধরা যাক, আমাদের একটি অ্যারে আছে এবং আমরা একটি নির্দিষ্ট শর্তের অধীনে একটি মান খুঁজতে চাই (যেমন, অ্যারের মধ্যে এমন একটি মান খুঁজতে যা ৩ দ্বারা বিভাজ্য।)
int custom_search(int arr[], int n, int target);
#include <stdio.h>
int custom_search(int arr[], int n, int target) {
for (int i = 0; i < n; i++) {
if (arr[i] % target == 0) { // Check if divisible by target
return i; // Return index
}
}
return -1; // Return -1 if not found
}
int main() {
int arr[] = {12, 15, 7, 20, 25};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 5;
int index = custom_search(arr, n, target);
if (index != -1) {
printf("Element divisible by %d found at index %d\n", target, index);
} else {
printf("No element divisible by %d found\n", target);
}
return 0;
}
Output:Element divisible by 5 found at index 0
এখানে
custom_search()
ফাংশনটি এমন একটি মান খুঁজে বের করেছে যা ৫ দ্বারা বিভাজ্য।
যদি অ্যারে সর্ট করা থাকে এবং আপনি নির্দিষ্ট শর্তে বাইনারি সার্চ করতে চান, তবে একটি কাস্টম বাইনারি সার্চ ফাংশন তৈরি করা যেতে পারে। এখানে bsearch()
ফাংশনের ব্যবহার না করে বাইনারি সার্চ কাস্টম শর্তে করা হয়েছে।
ধরা যাক, আপনি এমন একটি অ্যারে খুঁজতে চান যেখানে যেকোনো পজিটিভ সংখ্যা ১০ এর থেকে বড় হতে হবে এবং সেই মানটি সঠিক স্থান থেকে বের করা হবে।
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b); // Ascending order comparison
}
int binary_search(int arr[], int size, int key) {
int low = 0, high = size - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {2, 5, 8, 10, 15};
int size = sizeof(arr) / sizeof(arr[0]);
qsort(arr, size, sizeof(int), compare);
int key = 10;
int index = binary_search(arr, size, key);
if (index != -1) {
printf("Element %d found at index %d\n", key, index);
} else {
printf("Element not found\n");
}
return 0;
}
Output:Element 10 found at index 3
এখানে কাস্টম বাইনারি সার্চ ফাংশনটি সর্ট করা অ্যারেতে নির্দিষ্ট মান খুঁজে বের করেছে।
টেকনিক | বর্ণনা |
---|---|
কাস্টম কম্পারেটর ফাংশন | qsort() ব্যবহার করে কাস্টম শর্তে সর্ট করা (যেমন: বড় থেকে ছোট, স্ট্রিং দৈর্ঘ্য অনুযায়ী) |
কাস্টম সার্চ ফাংশন | অ্যারে বা লিস্টে কাস্টম শর্ত অনুযায়ী সার্চ (যেমন: শর্ত পূরণকারী মান খোঁজা) |
কাস্টম বাইনারি সার্চ | বাইনারি সার্চের মাধ্যমে সর্ট করা অ্যারেতে কাস্টম শর্তে দ্রুত অনুসন্ধান |
সি প্রোগ্রামে কাস্টম সর্টিং এবং সার্চিং ফাংশনগুলো ডেটা ম্যানিপুলেশন এবং ফলস্বরূপ ফলাফল পেতে খুবই কার্যকরী। এই ফাংশনগুলোর মাধ্যমে আপনি আপনার নির্দিষ্ট প্রয়োজন অনুসারে ডেটা ম্যানেজমেন্ট সহজে করতে পারেন।
common.read_more