तो मूल रूप से, आप जानना चाहते हैं कि क्या कोई छँटाई एल्गोरिथ्म है जो अपने औसत मामले से नीचा नहीं होगा यदि एक समान फ़ंक्शन दिया जाता है:
int Compare(object a, object b) { return Random.Next(-1,1); }
... जहां Random.Next () कुछ विधि है जो एक निर्दिष्ट समावेशी निचले और ऊपरी बाउंड के बीच एक यादृच्छिक रूप से उत्पन्न पूर्णांक का उत्पादन करेगी।
उत्तर वास्तव में यह है कि अधिकांश बुनियादी सॉर्टिंग एल्गोरिदम अपने औसत मामले के अनुसार प्रदर्शन करेंगे, क्योंकि वे निम्नलिखित दो में से कम से कम एक का पालन करते हैं:
- दो अद्वितीय तत्वों के बीच की तुलना दो बार कभी भी सॉर्ट में नहीं की जाती है, और / या
- सॉर्ट के प्रत्येक पुनरावृत्ति में, कम से कम एक तत्व की सही स्थिति निर्धारित की जाती है और इसलिए उस तत्व की फिर से तुलना नहीं की जाती है।
उदाहरण के लिए, SelectionSort अनसर्टेड तत्वों की उप-सूची के माध्यम से पुनरावृत्ति करता है, "कम से कम" और / या "सबसे बड़ा" तत्व पाता है (प्रत्येक को अब तक की सबसे बड़ी तुलना करके), इसे अपनी सही स्थिति में रखता है और दोहराता है। नतीजतन, एक गैर-निर्धारक तुलनित्र के साथ भी, प्रत्येक पुनरावृत्ति के अंत में एल्गोरिथ्म को एक ऐसा मूल्य मिलेगा जो यह सोचता है कि यह कम से कम या सबसे बड़ा है, इसे उस तत्व के साथ स्वैप करता है जिस स्थिति में यह निर्धारित करने की कोशिश कर रहा है, और कभी भी विचार नहीं करता है। वह तत्व फिर से, इस प्रकार यह शर्त 2 का पालन करता है। हालांकि, इस प्रक्रिया के दौरान कई बार ए और बी की तुलना की जा सकती है (सबसे चरम उदाहरण के रूप में, एक सरणी पर SelectionSort के कई पास पर विचार करें जो रिवर्स ऑर्डर में क्रमबद्ध है) इसलिए यह शर्त का उल्लंघन करता है 1 ।
MergeSort ने शर्त 1 का पालन किया लेकिन 2 नहीं; जैसा कि उप-सरणियों को विलय किया जाता है, एक ही उप-सरणी (बाईं या दाईं ओर) में तत्वों की एक-दूसरे से तुलना नहीं की जाती है क्योंकि यह पहले से ही निर्धारित किया गया है कि सरणी के उस तरफ के तत्व आपस में क्रम में हैं; एल्गोरिथ्म केवल यह निर्धारित करने के लिए प्रत्येक उप-श्रेणी के कम से कम अनारक्षित तत्व की तुलना करता है जो कम है और विलय की सूची में आगे जाना चाहिए। इसका मतलब यह है कि किसी भी दो अद्वितीय वस्तुओं ए और बी की एक दूसरे से अधिकतम एक समय की तुलना की जाएगी, लेकिन पूर्ण संग्रह में किसी भी दिए गए तत्व के "अंतिम" सूचकांक को तब तक नहीं जाना जाता है जब तक कि एल्गोरिथ्म पूरा नहीं हो जाता है।
InsertionSort केवल शर्त 1 का पालन करता है और भले ही इसकी समग्र रणनीति और जटिलता SelectionSort की तरह अधिक दिखती है। प्रत्येक अनसोल्ड एलिमेंट की तुलना सॉर्ट किए गए तत्वों से की जाती है, सबसे बड़ी-पहली, जब तक कि कोई ऐसा नहीं पाया जाता है जो निरीक्षण के तहत एलिमेंट से कम है। तत्व को उस बिंदु पर डाला जाता है, और फिर अगला तत्व माना जाता है। परिणाम यह है कि किसी भी ए और बी के सापेक्ष क्रम को एक तुलना द्वारा निर्धारित किया जाता है, और उस ए और बी के बीच आगे की तुलना कभी भी नहीं की जाती है, लेकिन किसी भी तत्व की अंतिम स्थिति को तब तक नहीं जाना जा सकता है जब तक कि सभी तत्वों पर विचार नहीं किया जाता है।
QuickSort दोनों का पालन करता हैशर्तेँ। प्रत्येक स्तर पर, एक धुरी को चुना जाता है और इस तरह से व्यवस्थित किया जाता है कि "बाईं ओर" में धुरी से कम तत्व होते हैं और "दाएं" पक्ष में धुरी से अधिक तत्व होते हैं। उस स्तर का परिणाम QuickSort (बायाँ) + pivot + QuickSort (दाएँ) है जिसका मूल अर्थ है कि धुरी तत्व की स्थिति ज्ञात है (बाईं ओर की लंबाई से अधिक एक सूचकांक), किसी भी अन्य तत्व की तुलना में धुरी कभी नहीं होती है बाद में इसे एक धुरी के रूप में चुना गया है (इसकी तुलना पिछले धुरी तत्वों के साथ की जा सकती है, लेकिन उन तत्वों को भी जाना जाता है और किसी भी उपधारा में शामिल नहीं किया जाता है), और कोई भी A और B जो धुरी के विपरीत छोर पर रहते हैं, वे कभी नहीं होते हैं की तुलना में। शुद्ध क्विकॉर्ट के अधिकांश कार्यान्वयन में, आधार मामला एक तत्व है, जिसके बिंदु पर इसका वर्तमान सूचकांक इसका अंतिम सूचकांक है और आगे कोई तुलना नहीं की जाती है।
(2/3)N−1)। जैसे ही तुलनित्र के परिणाम का अधिकतम निरपेक्ष मान बढ़ता है, किसी एक की तुलना नकारात्मक या शून्य पर लौटने की संभावना घट जाती है ।5, एल्गोरिथ्म को समाप्त करने का मौका बनाता है कि बहुत कम संभावना (99 सिक्का का मौका सभी लैंडिंग सिर झटकता है। , जो मूल रूप से यह उबलता है, 1.2 में से 1 * 10 30 है )
संपादित करें एक लंबा समय लेटर: कुछ "प्रकार" हैं जो विशेष रूप से उदाहरण के लिए डिज़ाइन किए गए हैं जो ऐसा नहीं करने के लिए जो एक यादृच्छिक तुलनित्र को शामिल करते हैं; शायद सबसे प्रसिद्ध BogoSort है। "एक सूची को देखते हुए, यदि सूची क्रम में नहीं है, तो सूची को फेरबदल करें और फिर से जांचें"। सैद्धांतिक रूप से यह अंततः मूल्यों के सही क्रमचय पर प्रहार करेगा , ऊपर "गैर-अनुकूलित बबलसॉर्ट" की तरह, लेकिन औसत मामला तथ्यात्मक-समय (एन! / 2) है, और जन्मदिन की समस्या के कारण (पर्याप्त यादृच्छिक सत्यापन के बाद) अनूठे लोगों की तुलना में डुप्लिकेट क्रमपरिवर्तन का सामना करने की अधिक संभावना बन जाती है) एल्गोरिथ्म की एक गैर-छिपी संभावना है कि आधिकारिक तौर पर एल्गोरिथ्म कभी पूरा नहीं होता है समय-निर्बाध।