क्विकसॉर्ट
एक वैल्यू चुनता है, जिसे पिवट कहते हैं, और छोटी वैल्यू उसके बाईं ओर व बड़ी दाईं ओर ले जाता है। फिर हर तरफ यही दोहराता है।
- सर्वश्रेष्ठ Ω(n log n)
- औसत Θ(n log n)
- सबसे खराब O(n²)
- मेमोरी O(log n)
- अनस्टेबल
- अतिरिक्त मेमोरी नहीं चाहिए
इनका मतलब क्या है?
- सर्वश्रेष्ठ: जब इनपुट इस एल्गोरिदम के लिए सबसे आसान हो, तब लिस्ट के आकार n के साथ समय कैसे बढ़ता है।
- औसत: n के साथ समय की आम बढ़त। n² में वैल्यू की संख्या दोगुनी होने पर लगभग चार गुना समय लगता है; n log n बहुत धीरे बढ़ता है।
- सबसे खराब: सबसे कठिन इनपुट पर बढ़त। तब काम का, जब रफ़्तार कभी नहीं गिरनी चाहिए।
- मेमोरी: लिस्ट के अलावा कितनी अतिरिक्त मेमोरी चाहिए। 1 यानी कुछ वेरिएबल, n यानी लिस्ट की एक कॉपी।
- स्टेबल: दो बराबर वैल्यू अपना मूल क्रम बनाए रखती हैं। रिकॉर्ड के किसी एक फ़ील्ड से सॉर्ट करते समय यह ज़रूरी है।
- अतिरिक्त मेमोरी नहीं चाहिए: लिस्ट के अंदर ही सॉर्ट करता है, दूसरी लिस्ट के बिना।
- तुलना हो रही है
- खिसक रहा है
- पिवट
- अंतिम जगह पर
प्ले दबाएं: रेखाएँ दिखाती हैं कि सॉर्ट के दौरान लागत कैसे बढ़ती है
प्ले दबाएं या एल्गोरिदम को चरण दर चरण देखें।
स्पेस: चलाएं या रोकें। बाएं और दाएं ऐरो: चरण दर चरण। Home और End: सीधे जाएं।
इसे आज़माएं: उलटी लिस्ट चुनें। पिवट हमेशा बची सबसे छोटी या सबसे बड़ी वैल्यू होता है, इसलिए हर बार एक तरफ खाली रहती है और लागत n² तक जाती है।
यह कैसे काम करता है
यहां पिवट रेंज की आखिरी वैल्यू है। बाएं से दाएं चलते हुए, जो भी वैल्यू पिवट से बड़ी नहीं है, उसे अदला-बदली से बाएं हिस्से में भेजा जाता है। फिर पिवट दोनों हिस्सों के बीच आता है और हमेशा वहीं रहता है। इसके बाद हर हिस्से को इसी तरह सॉर्ट किया जाता है।
यह कब सही विकल्प है
असल में सॉर्ट करने के सबसे तेज़ तरीकों में से एक, और इसे लगभग कोई अतिरिक्त मेमोरी नहीं चाहिए। पर अगर यह बार-बार खराब पिवट चुने, जैसे पहले से सॉर्टेड लिस्ट पर, तो धीमा हो जाता है। असली वर्शन पिवट ज़्यादा सोच-समझकर चुनते हैं।