एपीआई एक स्थिर छँटाई की गारंटी देता है जो क्विकसॉर्ट पेश नहीं करता है। हालांकि, जब छँटाई आदिम मूल्यों उनके प्राकृतिक आदेश से आप एक अंतर दिखाई नहीं देगा के रूप में आदिम मूल्यों कोई पहचान नहीं है। इसलिए, क्विकॉर्ट का उपयोग आदिम सरणियों के लिए किया जा सकता है और इसका उपयोग तब किया जाएगा जब इसे अधिक कुशल माना जाता है।
उन वस्तुओं के लिए जिन्हें आप नोटिस कर सकते हैं, जब अलग-अलग पहचान वाली वस्तुएँ जिन्हें उनके equals
कार्यान्वयन के अनुसार समान माना जाता है या प्रदान किया गया Comparator
है, उनके क्रम को बदल देते हैं। इसलिए, क्विकॉर्ट एक विकल्प नहीं है। तो एक प्रकार का मर्जसॉर्ट का उपयोग किया जाता है, वर्तमान जावा संस्करण टिमोर्ट का उपयोग करते हैं । यह दोनों पर लागू होता है, Arrays.sort
और Collections.sort
, हालांकि, जावा 8 के साथ, List
स्वयं सॉर्ट एल्गोरिदम को ओवरराइड कर सकता है।
¹ क्विकॉर्ट के दक्षता लाभ को जगह में किए जाने पर कम मेमोरी की आवश्यकता होती है। लेकिन इसमें नाटकीय रूप से सबसे खराब स्थिति होती है और यह एक सरणी में पूर्व-सॉर्ट किए गए डेटा के रन का शोषण नहीं कर सकता है, जो टिमर्ट करता है।
इसलिए, छंटाई एल्गोरिदम को संस्करण से संस्करण में फिर से काम किया गया, जबकि अब-भ्रामक रूप से नामित कक्षा में रहते हैं DualPivotQuicksort
। इसके अलावा, दस्तावेज़ीकरण ने पकड़ नहीं ली, जो दिखाता है, कि सामान्य रूप से एक खराब उपयोग किए गए एल्गोरिदम को विनिर्देशन में नाम देना, जब आवश्यक नहीं है।
वर्तमान स्थिति (जावा 8 से जावा 11 सहित) इस प्रकार है:
- आम तौर पर, आदिम सरणियों के लिए छंटाई के तरीके क्विकॉर्ट को केवल कुछ परिस्थितियों में उपयोग करेंगे । बड़े सरणियों के लिए, वे पहले सॉर्ट किए गए डेटा के रनों को पहचानने की कोशिश करेंगे, जैसे कि टिमसर्ट करता है, और जब एक निश्चित सीमा से अधिक रन नहीं होता है, तो उन्हें मर्ज कर देगा। अन्यथा वे क्विकसॉर्ट में वापस आ जाएंगे , लेकिन एक कार्यान्वयन के साथ जो छोटी रेंज के लिए इंसर्शन सॉर्ट के लिए वापस आ जाएगा , जो न केवल छोटे सरणियों को प्रभावित करता है, बल्कि त्वरित सॉर्ट की पुनरावृत्ति भी है।
sort(char[],…)
और एरेस केsort(short[],…)
लिए काउंटिंग सॉर्ट का उपयोग करने के लिए एक और विशेष मामला जोड़ें, जिसकी लंबाई एक निश्चित सीमा से अधिक है
- इसी तरह, काउंटिंग सॉर्ट का
sort(byte[],…)
उपयोग करेंगे , लेकिन बहुत छोटी सीमा के साथ, जो प्रलेखन के सबसे बड़े विपरीत बनाता है, जैसा कि क्विकॉर्टॉर्ट कभी नहीं करता है। यह केवल छोटे सरणियों और गिनती प्रकार के लिए सम्मिलन प्रकार का उपयोग करता है ।sort(byte[],…)