C की qsort और C++ की std::sort दोनों सॉर्टिंग फंक्शन्स हैं, लेकिन डिज़ाइन, प्रदर्शन और सुरक्षा में महत्वपूर्ण अंतर हैं।
फंक्शन सिग्नेचर्स
// C qsort
void qsort(void *base, size_t num, size_t size,
int (*compar)(const void*, const void*));
// C++ std::sort
template <class RandomIt, class Compare>
void sort(RandomIt first, RandomIt last, Compare comp);
विस्तृत तुलना
| पहलू | C qsort() | C++ std::sort() |
|---|---|---|
| एल्गोरिदम | क्विकसॉर्ट (आमतौर पर) | इंट्रोसॉर्ट (हाइब्रिड: क्विकसॉर्ट + हीपसॉर्ट + इंसर्शन सॉर्ट) |
| वर्स्ट-केस कॉम्प्लेक्सिटी | O(n²) - मानक द्वारा गारंटी नहीं | O(n log n) - C++11 से गारंटीड |
| रनटाइम प्रदर्शन | धीमा (वॉयड पॉइंटर, फंक्शन कॉल ओवरहेड) | तेज (इनलाइनिंग, टेम्पलेट ऑप्टिमाइज़ेशन) |
| टाइप सेफ्टी | कम (void* कास्टिंग) | उच्च (टेम्पलेट्स, कंपाइल-टाइम चेक) |
| फ्लेक्सिबिलिटी | केवल सन्निहित ऐरे | ऐरे, वेक्टर, डीक, कोई भी रैंडम-एक्सेस रेंज |
| कम्पेरेटर | फंक्शन पॉइंटर | कोई भी कॉल करने योग्य (फंक्टर, लैम्ब्डा, फंक्शन पॉइंटर) |
| स्टेबिलिटी | नहीं | नहीं (stable_sort उपयोग करें) |
उदाहरण: qsort
#include <stdlib.h>
#include <stdio.h>
int cmp_int(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
qsort(arr, 5, sizeof(int), cmp_int);
for (int i = 0; i < 5; i++) printf("%d ", arr[i]);
return 0;
}
उदाहरण: std::sort
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> v = {5, 2, 8, 1, 9};
std::sort(v.begin(), v.end(), [](int a, int b) { return a < b; });
for (int x : v) std::cout << x << ' ';
return 0;
}
निष्कर्ष
C++ कोड में हमेशा std::sort प्राथमिकता दें। C कोड में qsort एकमात्र मानक विकल्प है।