qsort का उपयोग
Standard library sort
qsort का उपयोग, CoddyKit पर C Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
मानक लाइब्रेरी की सॉर्ट
C की मानक लाइब्रेरी qsort को <stdlib.h> में उपलब्ध कराती है। यह किसी भी ऐरे को तुलना फ़ंक्शन के आधार पर सॉर्ट करती है, इसलिए आपको अपनी सॉर्ट बहुत कम ही लिखनी पड़ती है।
qsort का सिग्नेचर
प्रोटोटाइप यह है:
baseपहले तत्व का पॉइंटरnmembतत्वों की संख्याsizeहर तत्व के बाइटcomparतुलना फ़ंक्शन का पॉइंटर
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
तुलना फ़ंक्शन लिखना
तुलना फ़ंक्शन को दो const void * मिलते हैं। उन्हें वास्तविक प्रकार में कास्ट करें, डीरेफ़रेंस करें और ऋणात्मक, शून्य या धनात्मक मान लौटाएँ।
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void *a, const void *b) {
int x = *(const int *)a;
int y = *(const int *)b;
return (x > y) - (x < y); /* safe, no overflow */
}
int main(void) {
int a[] = {5, 2, 9, 1, 3};
qsort(a, 5, sizeof(int), cmp_int);
for (int i = 0; i < 5; i++) printf("%d ", a[i]);
printf("\n");
return 0;
}तुलना फ़ंक्शन में घटाव से बचें
x - y लौटाने पर बड़े पूर्णांकों के लिए ओवरफ़्लो हो सकता है और गलत परिणाम मिल सकते हैं। इसके बजाय बूलियन-अंतर वाली शैली (x > y) - (x < y) का उपयोग करें।
#include <stdio.h>
int main(void) {
int x = 2000000000, y = -2000000000;
printf("unsafe x-y = %d\n", x - y); /* overflow */
printf("safe = %d\n", (x > y) - (x < y));
return 0;
}अवरोही क्रम
अवरोही क्रम में सॉर्ट करने के लिए तुलना के परिणाम को उलट दें।
#include <stdio.h>
#include <stdlib.h>
int cmp_desc(const void *a, const void *b) {
int x = *(const int *)a, y = *(const int *)b;
return (y > x) - (y < x);
}
int main(void) {
int a[] = {5, 2, 9, 1, 3};
qsort(a, 5, sizeof(int), cmp_desc);
for (int i = 0; i < 5; i++) printf("%d ", a[i]);
printf("\n");
return 0;
}स्ट्रिंग सॉर्ट करना
char * के ऐरे को सॉर्ट करने पर तुलना फ़ंक्शन को पॉइंटर्स के पॉइंटर्स मिलते हैं। const char * const * में कास्ट करें और strcmp को कॉल करें।
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp_str(const void *a, const void *b) {
const char *x = *(const char * const *)a;
const char *y = *(const char * const *)b;
return strcmp(x, y);
}
int main(void) {
const char *names[] = {"charlie", "alice", "bob"};
qsort(names, 3, sizeof(char *), cmp_str);
for (int i = 0; i < 3; i++) printf("%s ", names[i]);
printf("\n");
return 0;
}स्ट्रक्चर सॉर्ट करना
आप स्ट्रक्चर के ऐरे को किसी भी फ़ील्ड के आधार पर सॉर्ट कर सकते हैं। यहाँ हम लोगों को आयु के आधार पर क्रमबद्ध करते हैं।
#include <stdio.h>
#include <stdlib.h>
typedef struct { char name[16]; int age; } Person;
int by_age(const void *a, const void *b) {
const Person *p = a, *q = b;
return (p->age > q->age) - (p->age < q->age);
}
int main(void) {
Person ppl[] = {{"Ann", 30}, {"Ben", 25}, {"Cid", 40}};
qsort(ppl, 3, sizeof(Person), by_age);
for (int i = 0; i < 3; i++) printf("%s %d\n", ppl[i].name, ppl[i].age);
return 0;
}बहु-कुंजी सॉर्टिंग
बराबरी की स्थिति में, पहली फ़ील्ड समान होने पर दूसरी फ़ील्ड की तुलना करें। इससे पहले आयु और फिर नाम को वर्णमाला क्रम में सॉर्ट किया जाता है।
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct { char name[16]; int age; } Person;
int cmp(const void *a, const void *b) {
const Person *p = a, *q = b;
if (p->age != q->age)
return (p->age > q->age) - (p->age < q->age);
return strcmp(p->name, q->name);
}
int main(void) {
Person ppl[] = {{"Zoe", 30}, {"Amy", 30}, {"Bo", 25}};
qsort(ppl, 3, sizeof(Person), cmp);
for (int i = 0; i < 3; i++) printf("%d %s\n", ppl[i].age, ppl[i].name);
return 0;
}qsort स्थिर नहीं है
C मानक के अनुसार qsort का स्थिर होना आवश्यक नहीं है। यदि आपको स्थिरता चाहिए, तो अपने तुलना फ़ंक्शन में बराबरी तोड़ने वाली कुंजी, जैसे मूल इंडेक्स, जोड़ें।
bsearch का सहायक
bsearch उसी तुलना शैली का उपयोग करके सॉर्टेड ऐरे पर बाइनरी सर्च करता है। तेज़ खोज के लिए इसे qsort के साथ इस्तेमाल करें।
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void *a, const void *b) {
int x = *(const int *)a, y = *(const int *)b;
return (x > y) - (x < y);
}
int main(void) {
int a[] = {1, 3, 5, 7, 9};
int key = 7;
int *found = bsearch(&key, a, 5, sizeof(int), cmp_int);
printf("%s\n", found ? "found" : "missing");
return 0;
}qsort का उपयोग क्यों करें
मानक qsort का अच्छी तरह परीक्षण किया गया है, यह अक्सर अनुकूलित इंट्रोसॉर्ट हाइब्रिड होता है और किसी भी प्रकार पर काम करता है। अपनी सॉर्ट तभी लिखें, जब आपको स्थिरता या ऐसा विशेष व्यवहार चाहिए जो लाइब्रेरी उपलब्ध नहीं कराती।
त्वरित जाँच
qsort की अपनी समझ जाँचें।
पुनरावृत्ति
आपने मानक लाइब्रेरी की सॉर्ट का उपयोग करना सीखा।
qsort(base, nmemb, size, compar)किसी भी ऐरे को सॉर्ट करती है- तुलना फ़ंक्शन
const void *को कास्ट करके तुलना का चिह्न लौटाते हैं - घटाव से बचें;
(x > y) - (x < y)का उपयोग करें qsortके स्थिर होने की गारंटी नहीं है;bsearchइसकी खोज-सहायक है
एआई शिक्षक के साथ C सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 39
- पाठ
- 144
अक्सर पूछे जाने वाले प्रश्न
क्या “qsort का उपयोग” पाठ निःशुल्क है?
हाँ—“qsort का उपयोग” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“qsort का उपयोग” में मैं क्या सीखूँगा?
Standard library sort आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“qsort का उपयोग” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Bubble और Insertion Sort
- Quicksort
- Mergesort
- qsort का उपयोग