मानक को किसी विशेष एल्गोरिदम की आवश्यकता नहीं होती है, केवल यह स्थिर होना चाहिए, और यह लगभग एन एलजी एन तुलनाओं का उपयोग करके सॉर्ट को पूरा करता है। यह उदाहरण के लिए, एक मर्ज-सॉर्ट या त्वरित प्रकार के लिंक किए गए-सूची संस्करण की अनुमति देता है (लोकप्रिय धारणा के विपरीत, त्वरित क्रम आवश्यक अस्थिर है, भले ही सरणी के लिए सबसे आम कार्यान्वयन है)।
उस प्रावधान के साथ, संक्षिप्त उत्तर यह है कि वर्तमान मानक पुस्तकालयों में, std::sort
को एक परिचय-क्रम (आत्मनिर्भर प्रकार) के रूप में कार्यान्वित किया जाता है, जो मूल रूप से एक क्विक्सोर्ट है जो इसकी रिकर्सन गहराई का ट्रैक रखता है, और एक पर स्विच करेगा हेपसोर्ट (आमतौर पर धीमी लेकिन गारंटीकृत ओ (एन लॉग एन) जटिलता) यदि क्विक्सॉर्ट रिकर्सन का बहुत गहराई से उपयोग कर रहा है। Introsort का हाल ही में हाल ही में आविष्कार किया गया था (1 99 0 के उत्तरार्ध में)। पुराने मानक पुस्तकालयों ने आम तौर पर इसके बजाय क्विक्सोर्ट का उपयोग किया।
stable_sort
मौजूद है क्योंकि सरणी की तरह कंटेनर छँटाई के लिए, सबसे तेजी से छँटाई एल्गोरिदम का सबसे अस्थिर कर रहे हैं, तो मानक दोनों std::sort
(तेज लेकिन जरूरी स्थिर नहीं) और std::stable_sort
(स्थिर लेकिन अक्सर कुछ हद तक धीमी) भी शामिल है।
हालांकि, दोनों सामान्य रूप से यादृच्छिक-पहुंच इटरेटर्स की अपेक्षा करते हैं, और एक लिंक की गई सूची की तरह कुछ खराब (यदि बिल्कुल) काम करेंगे। लिंक्ड सूचियों के लिए सभ्य प्रदर्शन प्राप्त करने के लिए, मानक में list::sort
शामिल है। एक लिंक्ड सूची के लिए, हालांकि, वास्तव में ऐसा कोई व्यापार-बंद नहीं है - यह एक मर्ज-सॉर्ट को लागू करना बहुत आसान है जो स्थिर और (लगभग) दोनों के रूप में तेज़ी से स्थिर है। इस प्रकार, उन्हें केवल sort
सदस्य फ़ंक्शन की आवश्यकता होती है जो स्थिर होने की आवश्यकता होती है।
स्रोत
2009-11-11 20:25:08
मुझे लगता है एल्गोरिथ्म विक्रेता पर निर्भर है –