Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में 3-वे मर्ज सॉर्ट


मर्ज सॉर्ट में सरणी को पुनरावर्ती रूप से 2 भागों में विभाजित करना, सॉर्ट करना और अंत में उन्हें मर्ज करना शामिल है। मर्ज सॉर्ट का एक प्रकार 3-वे मर्ज सॉर्ट है जहां सरणी को 2 भागों के बजाय 3 भागों में विभाजित किया जाता है।

मर्ज सॉर्ट सरणियों को पुनरावर्ती तरीके से आधे आकार के सबएरे में तोड़ता है। उसी तरह, 3-वे मर्ज सॉर्ट सरणियों को एक तिहाई आकार के सबएरे में तोड़ता है।

उदाहरण

इनपुट : 46, -1, -44, 79, 31, -41, 11, 20 , 74, 94 आउटपुट : -44 -41 -1 11 20 31 46 74 79 94 इनपुट : 24, -18 आउटपुट : -18 24

3 वे मर्ज सॉर्ट की समय जटिलता nlog3n है।

उदाहरण

// 3 वे मर्ज सॉर्ट करने के लिए C++ प्रोग्राम #include <bits/stdc++.h> usingnamespacestd; voidmerge1(intgArray1[], intlow1, intmid1, intmid2, inthigh1, intdestArray1[]){    inti = low1, j = mid1, k = mid2, l = low1;    // तीन रेंज में सबसे छोटे में से छोटा चुनें    while((i < mid1) && (j < mid2) && (k < high1)){       if(gArray1[i] < gArray1[j]){          if(gArray1[i] < gArray1[k]){             destArray1[l++] = gArray1[i++];          }          else{                destArray1[l++] = gArray1[k++];             }       }    else{          if(gArray1[j] < gArray1[k]){             destArray1[l++] = gArray1[j++];          }    else{          destArray1[l++] = gArray1[k++];       }    } } while((i < mid1) && (j < mid2)){    if(gArray1[i] < gArray1[j]){       destArray1[l++] = gArray1[i++];    }    else{       destArray1[l++] = gArray1[j++];    } } while((j < mid2) && (k < high1)){    if(gArray1[j] < gArray1[k]){    destArray1[l++] = gArray1[j++]; } else{       destArray1[l++] = gArray1[k++];    } } while((i < mid1) && (k < high1)){          if(gArray1[i] < gArray1[k]){             destArray1[l++] = gArray1[i++];          }    else{          destArray1[l++] = gArray1[k++];       }    }    while(i < mid1)    destArray1[l++] = gArray1[i++];    while(j < mid2)    destArray1[l++] = gArray1[j++];    while(k < high)    destArray1[l++] = gArray1[k++]; } voidmergeSort3WayRec(intgArray1[], intlow1, inthigh1, intdestArray1[]){    if(high1 - low1 < 2)    return;    intmid1 = low1 + ((high1 - low1) / 3);    intmid2 = low1 + 2 * ((high1 - low1) / 3) + 1;    mergeSort3WayRec(destArray1, low1, mid1, gArray1);    mergeSort3WayRec(destArray1, mid1, mid2, gArray1);    mergeSort3WayRec(destArray1, mid2, high1, gArray1);    merge(destArray1, low1, mid1, mid2, high1, gArray1); } voidmergeSort3Way(intgArray1[], intn1){    if(n1 == 0)    return;    intfArray1[n];    for(inti = 0; i < n1; i++)    fArray1[i] = gArray1[i];    // सॉर्ट फ़ंक्शन    mergeSort3WayRec(fArray1, 0, n, gArray1);    for(inti = 0; i < n1; i++)    gArray1[i] = fArray1[i]; } // ड्राइवर कोड intmain(){    intdata1[] = {46, -1, -44, 79, 31,    -41, 11, 20, 74, 94};    mergeSort3Way(data1,10);    cout<< "After 3 way merge sort: ";    for(inti = 0; i < 10; i++){          cout<< data1[i] << " ";       }    return0; }

आउटपुट

After 3 way merge sort: -44 -41 -1 11 20 31 46 74 79 94

  1. - C++ में स्ट्रैंड सॉर्ट

    इस सेक्शन में हम देखेंगे कि C++ के स्टैंडर्ड लाइब्रेरी का उपयोग करके किसी ऐरे या लिंक्ड लिस्ट को कैसे सॉर्ट कर सकते हैं। C++ में विभिन्न उद्देश्यों के लिए कई अलग-अलग लाइब्रेरीज हैं। सॉर्टिंग उनमें से एक है। C++ फ़ंक्शन std::list::sort() लिस्ट के एलिमेंट्स को आरोही क्रम में सॉर्ट करता है। समान एलिमे

  1. - C++ प्रोग्राम: लिंक्ड लिस्ट पर मर्ज सॉर्ट एल्गोरिदम इम्प्लीमेंट करना

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

  1. - C++ प्रोग्राम: मर्ज सॉर्ट लागू करना

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