2014-06-11 2 views
7

Arrays विधि DualPivotQuicksort, और जटिल प्रकारों का उपयोग करके मूल डेटा प्रकारों को क्रमबद्ध कर रहा है - मर्ज-सॉर्ट का उपयोग करके। (इनपुट आकार छोटा होने पर सम्मिलन-प्रकार)।Arrays.sort() - प्राचीन और जटिल डेटा प्रकारों के लिए दो अलग-अलग रणनीतियों को क्रमबद्ध करने के लिए

DualPivotQuicksort बड़े इनपुट आकारों पर अभी भी मर्ज-सॉर्ट का उपयोग कर रहा है, हालांकि, यह छोटे इनपुट आकारों की एक श्रृंखला पर दोहरी-क्विकॉर्ट का उपयोग कर रहा है।

मैं क्या सोच रहा हूं - आदिम और गैर-प्राइमेटिव प्रकारों को क्रमबद्ध करने में रणनीतियों में यह अंतर क्यों है?

एल्गोरिदम का प्रदर्शन महत्वपूर्ण रूप से इनपुट आकार पर निर्भर करता है - डेटा प्रकार नहीं। प्राइमेटिव्स (>, <, ==) पर सादे परिमाण तुलना के बजाय compareTo() को आमंत्रित करना मेमोरी में अतिरिक्त स्थान जला नहीं जाता है (और इस प्रकार मेमोरी स्पेस के कारण पूर्णकालिक प्रदर्शन धीमा नहीं होता है) जो होगा रन-टाइम के दौरान काफी महत्वपूर्ण है।

Arrays.sort() आदिम डेटा प्रकारों, और जटिल डेटा प्रकारों के लिए विभिन्न प्रकार की रणनीतियों का उपयोग करने के तरीके क्यों हैं?

टीआईए।

+0

यह संभव है कि ऑब्जेक्ट तुलना की तुलना में वस्तु तुलना तुलनात्मक रूप से तुलनात्मक रूप से अधिक महंगी हो सकती है। मैं टिमसॉर्ट और न ही दोहरी-पिवट क्विकॉर्ट से परिचित नहीं हूं, इसलिए मैं निश्चित रूप से नहीं कह सकता। जावाडोक टिमसॉर्ट के लिए तुलनात्मक रूप से तुलनात्मक लाभ का उल्लेख करता है, लेकिन यह देखते हुए कि अन्य प्रकार के लिए ऐसी कोई चीज़ नहीं है, मैं वास्तव में कोई निष्कर्ष नहीं खींच सकता। – awksp

उत्तर

9

क्योंकि सॉर्टिंग संदर्भ प्रकार stable होने की गारंटी है, जबकि सॉर्टिंग प्राइमेटिव्स को होने की आवश्यकता नहीं है (इसलिए क्विकॉर्ट, एक गैर-स्थिर सॉर्टिंग एल्गोरिदम का उपयोग किया जा सकता है; दूसरी ओर सॉर्ट मर्ज वास्तव में स्थिर है)। यह भी ध्यान दें कि quicksort is generally more optimal than mergesort (this भी देखें), जो बताता है कि प्राइमेटिव्स को सॉर्ट करते समय इसका लाभ क्यों लिया जाता है।

Arrays.sort से: बराबर तत्वों तरह के परिणाम के रूप पुनर्क्रमित नहीं किया जाएगा:

इस तरह स्थिर होने की गारंटी है।

+2

+1। मेरे सिर में गड़बड़ी की तुलना में बहुत आसान स्पष्टीकरण। – awksp

संबंधित मुद्दे