अनुकूली प्रकार

एक सोर्टिंग एल्गोरिदम अनुकूली सॉर्ट वर्ग में आता है यदि वह अपने इनपुट में वर्तमान क्रम का लाभ उठाता है। अतः यह इनपुट अनुक्रम में पूर्व-क्रमबद्धता से लाभ उठाता है - या अक्रम के उपायों की विभिन्न परिभाषाओं के लिए सीमित मात्रा में यादृच्छिकता - और तीव्रता से क्रमबद्ध होता है। इस प्रकार से अनुकूली सोर्टिंग सामान्यतः वर्तमान सोर्टिंग एल्गोरिदम को संशोधित करके की जाती है।

प्रेरणा
तुलना सॉर्ट एल्गोरिदम पारंपरिक रूप से समय जटिलता से निपटने के समय बिग o नोटेशन (n log n) की इष्टतम सीमा प्राप्त करने से निपटते हैं। अनुकूली सॉर्ट ठीक समय प्राप्त करने का प्रयास करने के लिए इनपुट के वर्तमान क्रम का लाभ उठाता है, ताकि एल्गोरिदम द्वारा सॉर्ट करने में लगने वाला समय अनुक्रम के आकार और अनुक्रम में अव्यवस्था का सुचारू रूप से बढ़ता फलन हो। दूसरे शब्दों में, इनपुट जितना अधिक क्रमबद्ध होगा, उसे उतनी ही तीव्रता से क्रमबद्ध किया जाना चाहिए।

अतः सॉर्टिंग एल्गोरिदम के लिए यह आकर्षक विशेषता है क्योंकि व्यवहार में लगभग सॉर्ट किए गए अनुक्रम सामान्य हैं। इस प्रकार, इनपुट में वर्तमान क्रम को ध्यान में रखकर वर्तमान सॉर्ट एल्गोरिदम के निष्पादन में सुधार किया जा सकता है।

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

उदाहरण
अतः इस प्रकार से अनुकूली सॉर्टिंग एल्गोरिदम का उत्कृष्ट उदाहरण स्ट्रेट इन्सर्टेशन सॉर्ट है। इस सॉर्टिंग एल्गोरिदम में, हम इनपुट को बाएं से दाएं स्कैन करते हैं, बार-बार वर्तमान आइटम की स्थिति ढूंढते हैं, और इसे पहले से सॉर्ट किए गए आइटमों की सरणी में डालते हैं।

इस प्रकार से स्यूडो कोड रूप में, स्ट्रेट इन्सर्टेशन सॉर्ट एल्गोरिदम कुछ इस प्रकार दिख सकता है (सरणी एक्स शून्य-आधारित है):

procedure Straight Insertion Sort (X): for j := 1 to length(X) - 1 do t := X[j]

i := j        while i > 0 and X[i - 1] > t do

X[i] := X[i - 1] i := i - 1 end X[i] := t    end अतः इस एल्गोरिदम के निष्पादन को इनपुट में व्युत्क्रमों की संख्या के संदर्भ में वर्णित किया जा सकता है, और फिर $T(n)$ लगभग $I(A) + (n - 1)$ के बराबर होगा, जहां $I(A)$ व्युत्क्रमों की संख्या है। पूर्व-क्रमबद्धता के इस माप का उपयोग करते हुए - व्युत्क्रमों की संख्या के सापेक्ष होने के कारण - स्ट्रेट इन्सर्टेशन सॉर्ट को सॉर्ट करने में जितना निकट होता है, कम समय लगता है।

इस प्रकार से अनुकूली सॉर्टिंग एल्गोरिदम के अन्य उदाहरण अनुकूली हीप सॉर्ट, मर्ज सॉर्ट या प्राकृतिक मर्ज सॉर्ट, पेसेंस सॉर्ट, शैलसॉर्ट, स्मूथसॉर्ट, एसपीप्लेसॉर्ट, टिमसॉर्ट, और कार्टेशियन ट्री सॉर्टिंग में अनुप्रयोग हैं।

यह भी देखें

 * सोर्टिंग एल्गोरिदम
 * स्मूथसॉर्ट