Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
📘 Lesson  ·  Lesson 79

Merge Sort

Merge Sort और Divide-and-Conquer

Merge sort sequence को दो ranges में बांटता, दोनों को recursively sort करता और फिर sorted results merge करता है। Zero या one-element range base case है। Reverse input पर भी time Θ(n log n) रहता है।

  1. Midpoint पर divide करें।
  2. Left और right range sort करें।
  3. दोनों ordered ranges combine करें।

Recursion और bubble sort से तुलना करें।

Recursive Trace

[38 27 43 3 9 82 10]
left  [38 27 43]  → [27 38 43]
right [3 9 82 10] → [3 9 10 82]
final merge        → [3 9 10 27 38 43 82]

Splitting order नहीं बनाता; returning recursion में sorted child ranges का merge actual ordering करता है।

Merge Procedure

Left, right और buffer के indices रखें। छोटे front element को buffer में copy करें, उस index को आगे बढ़ाएं, फिर बचा tail copy करें। Equal values पर left पहले लेने से stability रहती है।

Complete C++ Program

void merge_sort_range(std::vector<int>& a,
                      std::vector<int>& temp,
                      std::size_t left, std::size_t right) {
    if (right - left < 2) return;
    auto mid = left + (right - left) / 2;
    merge_sort_range(a, temp, left, mid);
    merge_sort_range(a, temp, mid, right);
    merge(a, temp, left, mid, right);
}
Input: 38 27 43 3 9 82 10 Sorted: 3 9 10 27 38 43 82

ऊपर English section का complete compile-ready program एक reusable buffer लेता है। Half-open ranges off-by-one errors कम करती हैं।

Correctness और Stability

Induction से: length 0/1 range sorted है। Recursive calls छोटी ranges sort करती हैं। Merge हर बार least unconsumed front चुनता है, हर element exactly once copy करता है; इसलिए ordered permutation मिलता है। Equal keys पर left पहले चुनने से original relative order बचता है।

Time और Space

PropertyResult
Best/Average/WorstΘ(n log n)
BufferΘ(n)
Recursion depthΘ(log n)
Stableहाँ, left-first tie

हर level में total merge work linear और levels logarithmic हैं।

Use Cases और Comparison

Stable order और predictable performance में merge sort अच्छा है। General vector के लिए std::sort, standard stable sorting के लिए std::stable_sort लें। External sorted runs और linked structures में merge pattern natural है। STL algorithms देखें।

Mistakes, Testing और Practice

  • Base case जरूर रखें।
  • Inclusive और exclusive bounds mix न करें।
  • Left/right leftover tail copy करें।
  • हर recursion में नया buffer न बनाएं।
  • Duplicates से stability test करें।

Empty, odd/even length, sorted, reverse और negative inputs test करें। Bottom-up merge sort practice करें।

Authoritative संदर्भ

Algorithm definition और complexity authoritative sources से verify किए गए हैं।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

Merge sort की time complexity क्या है?
Best, average और worst तीनों में Θ(n log n): split levels log n और हर level का total merge work linear है।
क्या merge sort stable है?
हो सकता है। Equal keys पर left element पहले चुनें; इस page का program इसी कारण less-than-or-equal लेता है।
क्या merge sort in-place है?
Common array version नहीं। यह O(n) auxiliary buffer और O(log n) recursion stack लेता है। Specialized variants अधिक complex हैं।
Recursion का base case क्या है?
जिस half-open range में दो से कम elements हों वह पहले से sorted है; right-left < 2 पर function return करता है।
Merge sort कब चुनें?
Stable order और predictable Θ(n log n) time जरूरी हो, या linked-list/external sorting model हो, तब उपयोगी है।
← Back to C++ Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

अगला topicBinary Search Tree (BST) आपकी प्रगति: 79 / 81 (98%) · Lesson 80 / 81 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें