क्यूसॉर्ट: Difference between revisions

From Vigyanwiki
(Created page with "{{other uses|Q sort (disambiguation)}} {{lowercase title}} क्यूसॉर्ट एक सी मानक लाइब्रेरी फ़ंक्शन (कंप...")
 
No edit summary
Line 1: Line 1:
{{other uses|Q sort (disambiguation)}}
{{other uses|क्यूसॉर्ट (विसंदिग्धीकरण)}}
{{lowercase title}}
{{lowercase title}}
क्यूसॉर्ट एक सी मानक लाइब्रेरी फ़ंक्शन (कंप्यूटर प्रोग्रामिंग) है जो उपयोगकर्ता द्वारा प्रदान किए गए तुलनात्मक फ़ंक्शन के अनुसार मनमानी वस्तुओं के सरणी के लिए एक [[बहुरूपता (कंप्यूटर विज्ञान)]] [[छँटाई एल्गोरिथ्म]] लागू करता है। इसका नाम क्विक सॉर्ट एल्गोरिथम (आर.एस. स्कॉवेन के कारण एक [[जल्दी से सुलझाएं]] वेरिएंट) के नाम पर रखा गया है, जिसका मूल रूप से [[यूनिक्स]] सी लाइब्रेरी में इसे लागू करने के लिए उपयोग किया गया था, हालांकि सी मानक को क्विकसॉर्ट को लागू करने की आवश्यकता नहीं है।<ref name="engineering">{{cite journal |first1=Jon L. |last1=Bentley |first2=M. Douglas |last2=McIlroy |title=इंजीनियरिंग एक तरह का कार्य|journal=Software: Practice and Experience |volume=23 |issue=11 |pages=1249–1265 |year=1993 |url=http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.14.8162 |doi=10.1002/spe.4380231105|citeseerx=10.1.1.14.8162 |s2cid=8822797 }}</ref>
क्यूसॉर्ट एक सी मानक लाइब्रेरी फलन (अभिकलित्र क्रमादेशन) है जो उपयोगकर्ता द्वारा प्रदान किए गए तुलनात्मक फलन के अनुसार मनमानी वस्तुओं के सरणी के लिए एक [[Index.php?title=विसंदिग्धीकरण (अभिकलित्र विज्ञान)|विसंदिग्धीकरण (अभिकलित्र विज्ञान)]] [[Index.php?title=सॉर्टिंग कलनविधि|सॉर्टिंग कलनविधि]] लागू करता है। इसका नाम क्विक सॉर्ट कलनविधि (आर.एस. स्कॉवेन के कारण एक [[Index.php?title=क्विकसॉर्ट|क्विकसॉर्ट]] वेरिएंट) के नाम पर रखा गया है, जिसका मूल रूप से [[यूनिक्स]] सी लाइब्रेरी में इसे लागू करने के लिए उपयोग किया गया था, हालांकि सी मानक को क्विकसॉर्ट को लागू करने की आवश्यकता नहीं है।<ref name="engineering">{{cite journal |first1=Jon L. |last1=Bentley |first2=M. Douglas |last2=McIlroy |title=इंजीनियरिंग एक तरह का कार्य|journal=Software: Practice and Experience |volume=23 |issue=11 |pages=1249–1265 |year=1993 |url=http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.14.8162 |doi=10.1002/spe.4380231105|citeseerx=10.1.1.14.8162 |s2cid=8822797 }}</ref>
क्यूसॉर्ट फ़ंक्शन के कार्यान्वयन से बहुरूपता (कंप्यूटर विज्ञान), विभिन्न प्रकार के डेटा को सॉर्ट करने की क्षमता प्राप्त होती है, [[समारोह सूचक]] को तीन-तरफ़ा तुलना फ़ंक्शन के साथ-साथ एक पैरामीटर जो इसके व्यक्तिगत इनपुट ऑब्जेक्ट के आकार को निर्दिष्ट करता है। [[आईएसओ सी]] को इनपुट सरणी में वस्तुओं पर कुल ऑर्डर लागू करने के लिए तुलना फ़ंक्शन की आवश्यकता होती है।<ref>ISO/IEC 9899:201x, Programming Languages—C (draft). §7.22.5. November 16, 2010.</ref>
क्यूसॉर्ट फलन के कार्यान्वयन से बहुरूपता (अभिकलित्र विज्ञान), विभिन्न प्रकार के आँकडे़ को छाटने की क्षमता प्राप्त होती है, [[Index.php?title=फलन सूचक|फलन सूचक]] को तीन-तरफ़ा तुलना फलन के साथ-साथ एक मापदण्ड जो इसके व्यक्तिगत निविष्ट वस्तु के आकार को निर्दिष्ट करता है। [[आईएसओ सी|आईएसओ]] सी को निविष्ट सरणी में मदों पर कुल आदेश लागू करने के लिए तुलना फलन की आवश्यकता होती है।<ref>ISO/IEC 9899:201x, Programming Languages—C (draft). §7.22.5. November 16, 2010.</ref>




== इतिहास ==
== इतिहास ==
1972 में [[ली मैकमोहन]] द्वारा एक क्यूसॉर्ट फ़ंक्शन लागू किया गया था।<ref name="v3"/><ref name="engineering"/>यह एक पुस्तकालय समारोह के रूप में [[ अनुसंधान यूनिक्स ]] में मौजूद था, लेकिन तब यह एक विधानसभा भाषा उपनेमका थी।<ref name="v3">{{cite web |title=क्यूसॉर्ट (III), यूनिक्स प्रोग्रामर मैनुअल, तीसरा संस्करण से|website=Unix Archive |url=http://minnie.tuhs.org/cgi-bin/utree.pl?file=V3/man/man3/qsort.3}}</ref>
1972 में [[ली मैकमोहन]] द्वारा एक क्यूसॉर्ट फलन लागू किया गया था।<ref name="v3"/><ref name="engineering"/>यह 3 यूनिक्स संस्करण में एक लाइब्रेरी फलन के रूप में मौजूद था,, लेकिन तब यह एक समुच्चायक उपनेमका थी।<ref name="v3">{{cite web |title=क्यूसॉर्ट (III), यूनिक्स प्रोग्रामर मैनुअल, तीसरा संस्करण से|website=Unix Archive |url=http://minnie.tuhs.org/cgi-bin/utree.pl?file=V3/man/man3/qsort.3}}</ref>
एसी संस्करण, मोटे तौर पर मानक सी संस्करण के इंटरफ़ेस के साथ, [[संस्करण 6 यूनिक्स]] में था।<ref>{{cite web |title=क्यूसॉर्ट (III), यूनिक्स प्रोग्रामर मैनुअल, छठे संस्करण से|website=Unix Archive |url=http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/man/man3/qsort.3}}</ref> इसे 1983 में [[ बर्कले सॉफ्टवेयर वितरण ]] के लिए फिर से लिखा गया था।<ref name="engineering"/>समारोह [[एएनएसआई सी]] (1989) में मानकीकृत किया गया था।
ए सी संस्करण, मोटे तौर पर मानक सी संस्करण के अंतरापृष्ठ के साथ, [[संस्करण 6 यूनिक्स]] में था।<ref>{{cite web |title=क्यूसॉर्ट (III), यूनिक्स प्रोग्रामर मैनुअल, छठे संस्करण से|website=Unix Archive |url=http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/man/man3/qsort.3}}</ref> इसे 1983 में [[ बर्कले सॉफ्टवेयर वितरण ]] के लिए फिर से लिखा गया था।<ref name="engineering"/>फलन [[एएनएसआई सी|एएनएसआई]] सी (1989) में मानकीकृत किया गया था।


1991 में, बेल लैब्स के कर्मचारियों ने देखा कि मैकमोहन और क्यूसॉर्ट के बीएसडी संस्करण कुछ सरल इनपुट के लिए समय की जटिलता का उपभोग करेंगे। इस प्रकार [[जॉन बेंटले (कंप्यूटर वैज्ञानिक)]] और [[डगलस मैक्लॉयय]] ने एक नया तेज और अधिक मजबूत कार्यान्वयन तैयार किया।<ref name="engineering"/>McIlroy बाद में 1998 में एक अधिक जटिल द्विघात-समय इनपुट का उत्पादन करेगा, जिसे एंटीक्विकॉर्ट कहा जाता है। यह फ़ंक्शन प्रतिकूल डेटा ऑन-द-फ्लाई का निर्माण करता है।<ref>{{cite journal |last1=McIlroy |first1=M. D. |title=क्विकॉर्ट के लिए एक हत्यारा विरोधी|url=https://www.cs.dartmouth.edu/~doug/mdmspe.pdf |journal=Software—Practice & Experience |volume=29 |pages=341–344 |doi=10.1002/(SICI)1097-024X(19990410)29:4<341::AID-SPE237>3.0.CO;2-R |date=10 April 1999 |issue=4 |s2cid=35935409}}</ref>
1991 में, बेल लैब्स के कर्मचारियों ने देखा कि क्यूसॉर्ट के मैकमोहन और बीएसडी संस्करण कुछ सरल निविष्ट के लिए द्विघात समय का उपयोग करेंगे।। इस प्रकार [[Index.php?title=जॉन बेंटले (अभिकलित्र वैज्ञानिक)|जॉन बेंटले (अभिकलित्र वैज्ञानिक)]] और [[डगलस मैक्लॉयय]] ने एक नया तेज और अधिक मजबूत कार्यान्वयन तैयार किया।<ref name="engineering"/> [[डगलस मैक्लॉयय|मैक्लॉयय]] बाद में 1998 में एक अधिक जटिल द्विघात-समय निविष्ट का उत्पादन करेगा, जिसे एंटीक्विकसॉर्ट कहा जाता है। यह फलन प्रतिकूल आँकडे़ ऑन-द-फ्लाई का निर्माण करता है।<ref>{{cite journal |last1=McIlroy |first1=M. D. |title=क्विकॉर्ट के लिए एक हत्यारा विरोधी|url=https://www.cs.dartmouth.edu/~doug/mdmspe.pdf |journal=Software—Practice & Experience |volume=29 |pages=341–344 |doi=10.1002/(SICI)1097-024X(19990410)29:4<341::AID-SPE237>3.0.CO;2-R |date=10 April 1999 |issue=4 |s2cid=35935409}}</ref>




== उदाहरण ==
== उदाहरण ==
C कोड का निम्न भाग दिखाता है कि qsort का उपयोग करके पूर्णांकों की सूची को कैसे क्रमबद्ध किया जाए।
सी कोड का निम्न भाग दिखाता है कि क्यूसॉर्ट का उपयोग करके पूर्णांकों की सूची को कैसे क्रमबद्ध किया जाए।


<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Line 43: Line 43:


== एक्सटेंशन ==
== एक्सटेंशन ==
मूल के तुलनात्मक कार्य के बाद से <code>qsort</code> केवल दो पॉइंटर्स को स्वीकार करता है, अतिरिक्त पैरामीटर्स में गुजरता है (उदाहरण के लिए एक तुलनात्मक फ़ंक्शन का उत्पादन करता है जो दो मानों के अंतर से दूसरे मान के साथ तुलना करता है) वैश्विक चर का उपयोग करके किया जाना चाहिए। समस्या को बर्कले सॉफ्टवेयर डिस्ट्रीब्यूशन और [[GNU]] यूनिक्स जैसी प्रणालियों द्वारा एक परिचय द्वारा हल किया गया था <code>qsort_r</code> फ़ंक्शन, जो एक अतिरिक्त पैरामीटर को तुलना फ़ंक्शन में पास करने की अनुमति देता है। के दो संस्करण <code>qsort_r</code> अलग तर्क आदेश हैं। C11 (C मानक संशोधन) a को परिभाषित करता है <code>qsort_s</code> अनिवार्य रूप से जीएनयू के समान <code>qsort_r</code>. [[macOS]] और [[FreeBSD]] libcs ​​में भी शामिल है <code>qsort_b</code>, एक वैरिएंट जो उसी समस्या के वैकल्पिक समाधान के रूप में [[ब्लॉक (सी भाषा विस्तार)]], क्लोजर (कंप्यूटर विज्ञान) के अनुरूप का उपयोग करता है।<ref>{{man|3|qsort_r|FreeBSD}}</ref>
मूल के तुलनात्मक कार्य के बाद से <code>qsort</code> केवल दो संकेत को स्वीकार करता है, अतिरिक्त मापदण्ड में गुजरता है (उदाहरण के लिए एक तुलनात्मक फलन का उत्पादन करता है जो दो मानों के अंतर से दूसरे मान के साथ तुलना करता है) वैश्विक चर का उपयोग करके किया जाना चाहिए। समस्या को बर्कले सॉफ्टवेयर वितरण और [[Index.php?title=जीएनयू|जीएनयू]] यूनिक्स जैसी प्रणालियों द्वारा एक समाविष्‍ट <code>qsort_r</code> फलन द्वारा हल किया गया था, जो तुलना फलन में एक अतिरिक्त मापदण्ड पारित करने की अनुमति देता है। के दो संस्करण <code>qsort_r</code> अलग तर्क आदेश हैं। C11 (सी मानक संशोधन) को परिभाषित करता है <code>qsort_s</code> अनिवार्य रूप से जीएनयू के समान <code>qsort_r</code>. [[Index.php?title=मैक ओएस|मैक ओएस]] और फ्रीबीएसडी लिबिक्स ​​में भी शामिल है <code>qsort_b</code>, एक वैरिएंट जो उसी समस्या के वैकल्पिक समाधान के रूप में [[ब्लॉक (सी भाषा विस्तार)]], क्लोजर (अभिकलित्र विज्ञान) के अनुरूप का उपयोग करता है।<ref>{{man|3|qsort_r|FreeBSD}}</ref>





Revision as of 20:19, 24 June 2023

क्यूसॉर्ट एक सी मानक लाइब्रेरी फलन (अभिकलित्र क्रमादेशन) है जो उपयोगकर्ता द्वारा प्रदान किए गए तुलनात्मक फलन के अनुसार मनमानी वस्तुओं के सरणी के लिए एक विसंदिग्धीकरण (अभिकलित्र विज्ञान) सॉर्टिंग कलनविधि लागू करता है। इसका नाम क्विक सॉर्ट कलनविधि (आर.एस. स्कॉवेन के कारण एक क्विकसॉर्ट वेरिएंट) के नाम पर रखा गया है, जिसका मूल रूप से यूनिक्स सी लाइब्रेरी में इसे लागू करने के लिए उपयोग किया गया था, हालांकि सी मानक को क्विकसॉर्ट को लागू करने की आवश्यकता नहीं है।[1] क्यूसॉर्ट फलन के कार्यान्वयन से बहुरूपता (अभिकलित्र विज्ञान), विभिन्न प्रकार के आँकडे़ को छाटने की क्षमता प्राप्त होती है, फलन सूचक को तीन-तरफ़ा तुलना फलन के साथ-साथ एक मापदण्ड जो इसके व्यक्तिगत निविष्ट वस्तु के आकार को निर्दिष्ट करता है। आईएसओ सी को निविष्ट सरणी में मदों पर कुल आदेश लागू करने के लिए तुलना फलन की आवश्यकता होती है।[2]


इतिहास

1972 में ली मैकमोहन द्वारा एक क्यूसॉर्ट फलन लागू किया गया था।[3][1]यह 3 यूनिक्स संस्करण में एक लाइब्रेरी फलन के रूप में मौजूद था,, लेकिन तब यह एक समुच्चायक उपनेमका थी।[3] ए सी संस्करण, मोटे तौर पर मानक सी संस्करण के अंतरापृष्ठ के साथ, संस्करण 6 यूनिक्स में था।[4] इसे 1983 में बर्कले सॉफ्टवेयर वितरण के लिए फिर से लिखा गया था।[1]फलन एएनएसआई सी (1989) में मानकीकृत किया गया था।

1991 में, बेल लैब्स के कर्मचारियों ने देखा कि क्यूसॉर्ट के मैकमोहन और बीएसडी संस्करण कुछ सरल निविष्ट के लिए द्विघात समय का उपयोग करेंगे।। इस प्रकार जॉन बेंटले (अभिकलित्र वैज्ञानिक) और डगलस मैक्लॉयय ने एक नया तेज और अधिक मजबूत कार्यान्वयन तैयार किया।[1] मैक्लॉयय बाद में 1998 में एक अधिक जटिल द्विघात-समय निविष्ट का उत्पादन करेगा, जिसे एंटीक्विकसॉर्ट कहा जाता है। यह फलन प्रतिकूल आँकडे़ ऑन-द-फ्लाई का निर्माण करता है।[5]


उदाहरण

सी कोड का निम्न भाग दिखाता है कि क्यूसॉर्ट का उपयोग करके पूर्णांकों की सूची को कैसे क्रमबद्ध किया जाए।

#include <stdlib.h>

/* Comparison function. Receives two generic (void) pointers to the items under comparison. */
int compare_ints(const void *p, const void *q) {
    int x = *(const int *)p;
    int y = *(const int *)q;

    /* Avoid return x - y, which can cause undefined behaviour
       because of signed integer overflow. */
    if (x < y)
        return -1;  // Return -1 if you want ascending, 1 if you want descending order. 
    else if (x > y)
        return 1;   // Return 1 if you want ascending, -1 if you want descending order.

    return 0;
    // All the logic is often alternatively written:
    return (x > y) - (x < y);
}

/* Sort an array of n integers, pointed to by a. */
void sort_ints(int *a, size_t n) {
    qsort(a, n, sizeof(*a), compare_ints);
}


एक्सटेंशन

मूल के तुलनात्मक कार्य के बाद से qsort केवल दो संकेत को स्वीकार करता है, अतिरिक्त मापदण्ड में गुजरता है (उदाहरण के लिए एक तुलनात्मक फलन का उत्पादन करता है जो दो मानों के अंतर से दूसरे मान के साथ तुलना करता है) वैश्विक चर का उपयोग करके किया जाना चाहिए। समस्या को बर्कले सॉफ्टवेयर वितरण और जीएनयू यूनिक्स जैसी प्रणालियों द्वारा एक समाविष्‍ट qsort_r फलन द्वारा हल किया गया था, जो तुलना फलन में एक अतिरिक्त मापदण्ड पारित करने की अनुमति देता है। के दो संस्करण qsort_r अलग तर्क आदेश हैं। C11 (सी मानक संशोधन) को परिभाषित करता है qsort_s अनिवार्य रूप से जीएनयू के समान qsort_r. मैक ओएस और फ्रीबीएसडी लिबिक्स ​​में भी शामिल है qsort_b, एक वैरिएंट जो उसी समस्या के वैकल्पिक समाधान के रूप में ब्लॉक (सी भाषा विस्तार), क्लोजर (अभिकलित्र विज्ञान) के अनुरूप का उपयोग करता है।[6]


संदर्भ

  1. 1.0 1.1 1.2 1.3 Bentley, Jon L.; McIlroy, M. Douglas (1993). "इंजीनियरिंग एक तरह का कार्य". Software: Practice and Experience. 23 (11): 1249–1265. CiteSeerX 10.1.1.14.8162. doi:10.1002/spe.4380231105. S2CID 8822797.
  2. ISO/IEC 9899:201x, Programming Languages—C (draft). §7.22.5. November 16, 2010.
  3. 3.0 3.1 "क्यूसॉर्ट (III), यूनिक्स प्रोग्रामर मैनुअल, तीसरा संस्करण से". Unix Archive.
  4. "क्यूसॉर्ट (III), यूनिक्स प्रोग्रामर मैनुअल, छठे संस्करण से". Unix Archive.
  5. McIlroy, M. D. (10 April 1999). "क्विकॉर्ट के लिए एक हत्यारा विरोधी" (PDF). Software—Practice & Experience. 29 (4): 341–344. doi:10.1002/(SICI)1097-024X(19990410)29:4<341::AID-SPE237>3.0.CO;2-R. S2CID 35935409.
  6. qsort_r(3) – FreeBSD Library Functions Manual