সি-তে qsort() এবং সি++-তে std::sort() — দুটোই সর্টিং ফাংশন কিন্তু ডিজাইন, পারফরম্যান্স এবং সেফটিতে বড় পার্থক্য রয়েছে।
qsort() (C Standard Library — <stdlib.h>)
void qsort(void *base, size_t num, size_t size,
int (*compar)(const void*, const void*));
- এলগরিদম: কুইকসোর্ট (QuickSort) — কম্পাইলার-নির্ভর
- ভয়েড পয়েন্টার (
void*) ব্যবহার করে — টাইপ আনসেফ - কম্পারেটর ফাংশন পয়েন্টার নেয় — কাল কনভেনশন ওভারহেড
- সি স্ট্যান্ডার্ড কমপ্লেক্সিটি গ্যারান্টি দেয় না
- সহজে জেনেরিক নয় — প্রতিটি টাইপের জন্য আলাদা কম্পারেটর লাগে
std::sort() (C++ STL — <algorithm>)
template<class RandomIt, class Compare>
void sort(RandomIt first, RandomIt last, Compare comp);
- এলগরিদম: ইন্ট্রোসোর্ট (Introsort) — কুইকসোর্ট + হিপসোর্ট + ইনসারশন সোর্ট হাইব্রিড
- টেমপ্লেট-বেসড — টাইপ সেফ, কম্পাইল-টাইম ইনলাইনিং
- ফাংশন অবজেক্ট/ল্যাম্বডা নেয় — শূন্য ওভারহেড বিহেভিয়ার
- C++11 থেকে ওয়ার্স্ট-কেস
O(n log n)গ্যারান্টি - এরে, ভেক্টর, ডিক, অ্যারে — সব কন্টেইনারে কাজ করে
তুলনামূলক টেবিল
| বিষয় | qsort() (C) | std::sort() (C++) |
|---|---|---|
| এলগরিদম | QuickSort | Introsort (Hybrid) |
| ওয়ার্স্ট-কেস কমপ্লেক্সিটি | গ্যারান্টি নেই (সাধারণত O(n²)) | O(n log n) (C++11+) |
| রানিং টাইম | ধীর | দ্রুত (ইনলাইনিং-এ Cộng) |
| ফ্লেক্সিবিলিটি | কম (শুধু C-এরে) | বেশি (সর্ব STL কন্টেইনার) |
| টাইপ সেফটি | নहीं (void*) | হ্যাঁ (টেমপ্লেট) |
| কম্পারেটর | ফাংশন পয়েন্টার | ফাংশন/ল্যাম্বডা/ফাংশন অবজেক্ট |
উদাহরণ: std::sort ল্যাম্বডা দিয়ে
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v = {5, 2, 8, 1, 9};
sort(v.begin(), v.end(), [](int a, int b){ return a > b; }); // ডেসেন্ডিং
for (int x : v) cout << x << ' '; // 9 8 5 2 1
return 0;
}
সারসংক্ষেপ
সি++-এ সবসময় std::sort ব্যবহার করুন। এটি দ্রুত, সেফ, এবং এক্সপ্রেসিভ। qsort শুধু সি-কোড বা লিগ্যাসি ইন্টারফেসের জন্য।