सी

2012-07-17 3 views
5

में सरणी सॉर्ट करने के लिए फ़ंक्शंस में निर्मित क्या एरर सॉर्ट करने के लिए सी प्रोग्रामिंग भाषा में कोई भी अंतर्निहित कार्य है? या मुझे अपने कार्यों को लिखना है?सी

+16

'' में – nhahtdh

+1

@nhahtdh जवाब के रूप में पोस्ट न करें stdlib.h' qsort'? – triclosan

+1

@ट्रिकलोसन: 1 लाइनर टिप्पणी लिखना एक पूर्ण उत्तर लिखने से कम प्रयास करता है। – nhahtdh

उत्तर

9

बाहर चेक qsort

सिंटेक्स:

#include <stdlib.h>
void qsort(void *buf, size_t num, size_t size, int (*compare)(const void *, const void *));

विवरण:

qsort() समारोह प्रकार buf quicksort का उपयोग कर (जो संख्या आइटम, आकार आकार के प्रत्येक शामिल हैं)। तुलना फ़ंक्शन का उपयोग buf में आइटम्स की तुलना करने के लिए किया जाता है। यदि पहली तर्क दूसरे से कम है, शून्य की तुलना में शून्य, और सकारात्मक अगर दूसरा तर्क दूसरे से बड़ा है तो तुलना नकारात्मक होनी चाहिए। qsort() आरोही क्रम में buf प्रकार।

+0

बहुत बहुत धन्यवाद: डी अन्य लोगों के लिए भी धन्यवाद जिन्होंने उत्तर दिया: डी – CluelessNoob

+2

नोट: qsort() आवश्यक रूप से quicksort नहीं है। (अक्सर यह है, हालांकि) – wildplasser

7

stdlib.h में आप qsort का उपयोग कर सकते हैं। यह त्वरित-क्रमबद्ध एल्गोरिदम है, जिसमें ओ (nlogn) की औसत समय जटिलता और ओ (एन) की सबसे खराब केस जटिलता है।C99 standard और यहां तक ​​कि नए C11 Standard फ़ंक्शन की कार्यान्वयन या समय जटिलता को अनिवार्य नहीं है। हालांकि, यह बहुत संभावना है कि सामान्य कार्यान्वयन एल्गोरिदम का उपयोग करेगा जो औसत केस ओ (nlogn) समय जटिलता उत्पन्न करता है (जो तुलना करके सॉर्ट करने के लिए इष्टतम है)।

आप किसी भी प्रकार की सरणी (यहां तक ​​कि struct) को सॉर्ट करने के लिए इसका उपयोग कर सकते हैं - लेकिन आपको सरणी के 2 तत्वों के बीच तुलना करने के लिए तुलनात्मक कार्य प्रदान करना होगा।

+2

नोट: qsort() आवश्यक रूप से quicksort नहीं है। (अक्सर यह है, हालांकि) – wildplasser

+0

@ विल्डप्लेसर: संपादित। – nhahtdh

+0

आप आजकल [सी 11 मानक] (http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf) से लिंक कर सकते हैं :) – pmg

6

qsort अच्छी तरह से जाना जाता है। अन्य लोग हैंडपोर्ट, विलयोर्ट इत्यादि जैसे हैं। कृपया अधिक जानकारी के लिए लिंक देखें।

कृपया ध्यान दें कि उनमें से सभी इनपुट के रूप में तुलनात्मक कार्यों को लेते हैं, जिससे उन्हें देशी और उपयोगकर्ता द्वारा बनाए गए डेटा प्रकारों के साथ आसानी से उपयोग करने योग्य बना दिया जाता है।

+1

मैं उत्सुक था कि मानक पुस्तकालय मौजूद है ' mergesort' और 'heapsort' ... पता चला है कि वे फ्रीबीएसडी के libc में हैं। ठंडा। +1 (नोट: वे glibc में मौजूद नहीं दिखते हैं।) –

+0

वे गैर-मानक सी फ़ंक्शन हैं। – nhahtdh

0

सरल वाक्य रचना:

int function (const void * a, const void * b) {return (*(int*)a-(int*)b);} 
`qsort(arr_name , sizeofarray , sizeof(int), function);