logo

sortare îmbinare în 3 căi în c

Acest articol discută 3 moduri de a îmbina sortarea în c. În sortarea prin îmbinare, matricea este împărțită recursiv în două părți, sortată și, în final, îmbinată.

Varianta de sortare de îmbinare este tratată ca o sortare de îmbinare în trei căi care împarte matricea în trei părți în loc să o împartă în două părți. Sortarea prin îmbinare împarte recursiv o matrice în submatrice de jumătate de dimensiune. În mod similar, o sortare de îmbinare în trei direcții descompune o matrice în submatrice de o treime din dimensiune.

În sortarea prin îmbinare, matricea este împărțită recursiv în două părți, sortată și, în final, îmbinată. O variantă de sortare de îmbinare se numește sortare de îmbinare în trei căi, unde în loc să împartă matricea în două părți, o împarte în trei părți.

Exemple de sortare de îmbinare: Exemplul de sortare de îmbinare este dat mai jos -

 Input: 4, 8, -4, -9, 10, 55, 46, 70, -56, 78, 90, 67, 85, 20, 29 Output: -56 -9 -4 4 8 10 20 29 46 55 67 70 78 85 90 Input: 98, -67 Output: -67 98 

Complexitatea temporală a unei sortări de îmbinare în trei căi este nlog3n.

Exemplul 1: Aici, dăm un exemplu de 3 moduri de a îmbina sortarea în c. Exemplul este dat mai jos -

 #include usingnamespacestd; voidmerge1(intgArr1[], intlow1, intmid1,intmid2, inthigh1, intdestArr1[]) { inti = low1, a = mid1, b = mid2, c = low1; while((i <mid1) 2 && (a < mid2) (b high1)) { if(garr1[i] garr1[j]) garr1[b]) destarr1[c++]="gArr1[i++];" } else else{ if(garr1[j] garr1[b]){ while((i mid1) mid2)){ garr1[a]){ while((a high1)){ if(garr1[a] while(i while(a while(b high) voidmergesort3wayrec(intgarr1[], intlow1, inthigh1, intdestarr1[]) if(high1 - low1 2) return; intmid1="low1" + ((high1 low1) 3); intmid2="low1" * 3) 1; mergesort3wayrec(destarr1, low1, mid1, garr1); mid2, high1, merge(destarr1, voidmergesort3way(intgarr1[], intn1){ if(n1="=" 0) intfarr1[n]; for(inti="0;" i n1; i++) farr1[i]="gArr1[i];" mergesort3wayrec(farray1, 0, n, garray1); garr1[i]="fArr1[i];" int main(){ intdata1[]="{4," 8, -4, -9, 10, 55, 46, 70, -56, 78, 90, 67, 85, 20, 29}; mergesort3way(data1,10); cout<< 'the result after the three way of merge sort is: '; 10; data1[i] << ' return0; pre> <p> <strong>Result:</strong> Now we compile the above program, and after successful compilation, we run it. Then the result is given below -</p> <pre> The result after the three way of merge sort is: -56 -9 -4 4 8 10 20 29 46 55 67 70 78 85 90 </pre> <h2>How does the above code work?</h2> <p>Here we first replica the contents of the statistics array into every other array called fArr. Then type the array by locating the midpoint that divides the array into three elements and calls the type characteristic on every array. The basic case of recursion is when an array has size 1 and is returned from a function. Then the array merging starts, and finally, the sorted array is in fArr and copied to gArr.</p> <h2>The time complexity of the merge sort:</h2> <p>Three-way merge sort equation is: T(n) = 2T(n/2) + O(n)</p> <p>Similarly, for a three-way merge sort, we have: T( n) = 3T(n/3) + O(n)</p> <p>Solving with the master method, its complexity is O(n log 3n).</p> <p>Time complexity appears less than a two-way merge sort, but the more comparisons in the merge function, the more time it might take in practice.</p> <p>So, in this article, we briefly discuss 3 ways to merge sort in c. The merge sort variant is treated as a 3-way merge sort that splits the array into three parts instead of splitting it into two parts. We also give an example that is related to this topic.</p> <hr></mid1)>

Cum funcționează codul de mai sus?

Aici replicăm mai întâi conținutul matricei de statistici în orice altă matrice numită fArr. Apoi tastați matricea prin localizarea punctului de mijloc care împarte matricea în trei elemente și apelează caracteristica tipului pe fiecare matrice. Cazul de bază al recursiunii este atunci când o matrice are dimensiunea 1 și este returnată de la o funcție. Apoi începe îmbinarea matricei și, în sfârșit, matricea sortată este în fArr și copiată în gArr.

Complexitatea temporală a sortării îmbinării:

Ecuația de sortare a îmbinării în trei căi este: T(n) = 2T(n/2) + O(n)

În mod similar, pentru o sortare de îmbinare în trei direcții, avem: T(n) = 3T(n/3) + O(n)

Rezolvând cu metoda master, complexitatea acesteia este O(n log 3n).

Complexitatea timpului pare mai puțin decât o sortare de îmbinare în două sensuri, dar cu cât sunt mai multe comparații în funcția de îmbinare, cu atât ar putea dura mai mult timp în practică.

Deci, în acest articol, discutăm pe scurt 3 moduri de a îmbina sortarea în c. Varianta de sortare de îmbinare este tratată ca o sortare de îmbinare în trei căi care împarte matricea în trei părți în loc să o împartă în două părți. Dăm și un exemplu care are legătură cu acest subiect.