2013-05-16 2 views
9

अनुसार अधिक से अधिक सुलझाने के लिए Wikipedia रहे हैं:क्यों तरह जावा द्वारा प्रयोग किया जाता मर्ज है एक सरणी तत्वों 7

"जावा, Arrays.sort में() तरीकों का उपयोग मर्ज तरह या एक देखते quicksort पर निर्भर करता है डेटाटाइप्स और कार्यान्वयन दक्षता के लिए स्विच प्रकार सम्मिलन से जब से कम सात सरणी तत्वों "हल कर किया जा रहा है

लेकिन क्यों? दोनों मर्ज सॉर्ट और त्वरित सॉर्ट ओ (एन लॉग एन) हैं।

+2

http://stackoverflow.com/questions/3707190/why-java-arrays-use-two-different-sort-algorithms-for-different-types –

+0

मैं जानता हूँ कि Yannis दिखाई और मुझे एक प्रकार का जहाज़ जा रहा है इसके लिए, लेकिन यह शायद प्रोग्रामर पर होना चाहिए। – MikeTheLiar

+0

और यहाँ, कोड http://stackoverflow.com/questions/15154158/why-collections-sort-is-using-merge-sort-insteadof-quicksort –

उत्तर

1

ऐसा नहीं है कि तदर्थ नहीं है:

Arrays.java की तरह विधि पुरातन की सरणियों के लिए quicksort का उपयोग करता है और वस्तुओं की सरणियों के लिए तरह मर्ज करें।

Why does Java's Arrays.sort method use two different sorting algorithms for different types?

इसके अलावा, डॉक्स के अनुसार:

उदाहरण के लिए, प्रकार के द्वारा प्रयोग किया एल्गोरिथ्म (वस्तु []) एक mergesort होना जरूरी नहीं है, लेकिन इसे स्थिर होना जरूरी है ।

और जावाडोक से दूसरे बोली:

इस तरह स्थिर होने की गारंटी है: बराबर तत्वों तरह के परिणाम के रूप पुनर्क्रमित नहीं किया जाएगा।

कार्यान्वयन टिप्पणी: इस कार्यान्वयन, एक स्थिर, अनुकूली, पुनरावृत्ति mergesort कि एन एलजी से अब तक कम की आवश्यकता है (एन) की तुलना जब इनपुट सरणी आंशिक रूप से क्रमबद्ध किया जाता है, जबकि एक पारंपरिक mergesort की प्रदर्शन की पेशकश जब इनपुट सरणी यादृच्छिक रूप से आदेश दिया गया है। यदि इनपुट सरणी लगभग क्रमबद्ध है, कार्यान्वयन के लिए लगभग एन तुलना की आवश्यकता है। अस्थायी भंडारण आवश्यकताओं को लगभग क्रमबद्ध इनपुट सरणी के लिए यादृच्छिक रूप से आदेशित इनपुट सरणी के लिए n/2 ऑब्जेक्ट संदर्भों के लिए एक छोटे से स्थिर से भिन्न होता है।

कार्यान्वयन आरोही के बराबर लाभ और उसके इनपुट सरणी में अवरोही क्रम लेता है, और एक ही इनपुट सरणी के विभिन्न भागों में आरोही और अवरोही क्रम का लाभ ले सकते। यह दो या दो से अधिक क्रमबद्ध सरणी विलय करने के लिए उपयुक्त है: केवल सरणी को संगत करें और परिणामस्वरूप सरणी को सॉर्ट करें।

कार्यान्वयन को टिम पीटर्स की सूची प्रकार से पाइथन (टिमॉर्ट) के लिए अनुकूलित किया गया था।

+0

के लेखक के एक जवाब में अच्छी तरह से मैं एक गलती संपादित देखना बनाई गई है मेरा मतलब त्वरित प्रकार था। – joker

0

वे विलय विलय को स्थानांतरित करने के लिए चले गए क्योंकि पाया गया कि वास्तविक आंशिक रूप से क्रमबद्ध डेटा सेट के लिए सांख्यिकीय रूप से यह विधि त्वरित प्रकार की तुलना में थोड़ा तेज हो सकती है।

+2

जावा ने कभी भी प्राइमेटिव्स के लिए मर्जोर्ट का उपयोग नहीं किया, और कभी भी संदर्भ प्रकारों के लिए क्विकॉर्ट का उपयोग नहीं किया। –

+2

वे कौन हैं? संदर्भ, कृपया। –

+0

संदर्भ: http://docs.oracle.com/javase/tutorial/collections/algorithms/ – AlexR

10

जहां एल्गोरिदम भिन्न हैं सामान्य मामला व्यवहार और यह वह जगह है जहां सम्मिलन क्रम सबसे खराब है। दूसरी तरफ, बहुत छोटे संग्रह के लिए (एन ≈ एन) प्रविष्टि प्रकार की सादगी जीत जाती है।

जावा एल्गोरिथ्म चयन नियम quicksort पहले पसंद करते हैं, और केवल विशिष्ट प्रतिबंधों की वजह से वापस कुछ और करने के लिए आते हैं। Quicksort, अर्थात्, एक अस्थिर तरह है और इस तरह पुरातन की छंटाई के लिए ही स्वीकार्य है। संदर्भ प्रकारों के लिए, टिमसॉर्ट का उपयोग ओपनजेडीके 7 (पहले मर्जोर्ट) के रूप में किया जाता है।

+0

मैंने गलती की, मेरा मतलब था त्वरित प्रकार, संपादन देखें। – joker

+1

अतिरिक्त ध्यान दें: निवेशन तरह छोटे संग्रहों पर जीतता है, क्योंकि यह एक कम लगातार कारक है, जो बड़े-ओ रिकॉर्ड नहीं करता है। ध्यान दें कि, उदाहरण के लिए: 'n^2 <10n'' n <10' के लिए। – Dukeling

+0

@ डिकलिंग हाँ, यह मेरा मुद्दा है। सरलता का मतलब कम निरंतर कारक है। –

1

क्विक्सोर्ट और विलय दोनों ओ (एन लॉग एन) औसत प्रदर्शन दोनों में हैं। सबसे बुरे मामले में, क्विक्सॉर्ट ओ (एन^2) है।

+1

उनका औसत मामला ओ (एन^2) नहीं है, इसकी ओ (nlogn) है। –

+0

इसे पकड़ने के लिए धन्यवाद। मैं एन^2 सबसे खराब मामले पर केंद्रित था, और औसत के लिए इसे गलती से टाइप किया। –

0

खैर जावा 7 Timsort उपयोग करता है - मर्ज और सम्मिलन का एक संकर। वास्तव में यह व्यापक रूप से उपयोग किया जाता है - एंड्रॉइड, ऑक्टेव, पायथन इसका भी उपयोग करते हैं। http://en.wikipedia.org/wiki/Timsort

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