কম্পিউটার টিউটোরিয়াল

সি-র qsort() এবং সি++-র sort() ফাংশনের পার্থক্য

সি-তে 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++)
এলগরিদমQuickSortIntrosort (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 শুধু সি-কোড বা লিগ্যাসি ইন্টারফেসের জন্য।

  1. C++-এ লিংকড লিস্টে ইন্সারশন সর্ট

  2. 3-ওয়ে মার্জ সোর্ট (3-way Merge Sort) C++-এ

  3. C++-এ বাইনারি ইন্সারশন সোর্ট

  4. C++-এ স্ট্র্যান্ড সর্ট (Strand Sort)