logo

3-Wege-Zusammenführungssortierung in c

In diesem Artikel werden drei Möglichkeiten zum Zusammenführen der Sortierung in c erläutert. Bei der Zusammenführungssortierung wird das Array rekursiv in zwei Teile geteilt, sortiert und schließlich zusammengeführt.

Die Variante der Zusammenführungssortierung wird als 3-Wege-Zusammenführungssortierung behandelt, die das Array in drei Teile aufteilt, anstatt es in zwei Teile aufzuteilen. Durch die Zusammenführungssortierung wird ein Array rekursiv in Teilarrays halber Größe aufgeteilt. In ähnlicher Weise zerlegt eine Drei-Wege-Zusammenführungssortierung ein Array in Unterarrays von einem Drittel der Größe.

Bei der Zusammenführungssortierung wird das Array rekursiv in zwei Teile geteilt, sortiert und schließlich zusammengeführt. Eine Variante der Zusammenführungssortierung heißt 3-Wege-Zusammenführungssortierung, bei der er das Array nicht in zwei Teile, sondern in drei Teile aufteilt.

Beispiele für die Zusammenführungssortierung: Das Beispiel der Zusammenführungssortierung ist unten angegeben:

 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 

Die zeitliche Komplexität einer Drei-Wege-Merge-Sortierung beträgt nlog3n.

Beispiel 1: Hier geben wir ein Beispiel für drei Möglichkeiten zum Zusammenführen der Sortierung in c. Das Beispiel ist unten aufgeführt:

 #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)>

Wie funktioniert der obige Code?

Hier replizieren wir zunächst den Inhalt des Statistik-Arrays in jedes andere Array namens fArr. Geben Sie dann das Array ein, indem Sie den Mittelpunkt suchen, der das Array in drei Elemente unterteilt, und das Typmerkmal für jedes Array aufruft. Der Grundfall einer Rekursion liegt vor, wenn ein Array die Größe 1 hat und von einer Funktion zurückgegeben wird. Dann beginnt die Array-Zusammenführung und schließlich befindet sich das sortierte Array in fArr und wird nach gArr kopiert.

Die zeitliche Komplexität der Zusammenführungssortierung:

Die Drei-Wege-Zusammenführungssortierungsgleichung lautet: T(n) = 2T(n/2) + O(n)

Ebenso gilt für eine Drei-Wege-Zusammenführungssortierung: T( n) = 3T(n/3) + O(n)

Bei der Lösung mit der Master-Methode beträgt die Komplexität O(n log 3n).

Die zeitliche Komplexität scheint geringer zu sein als bei einer bidirektionalen Zusammenführungssortierung, aber je mehr Vergleiche in der Zusammenführungsfunktion vorhanden sind, desto mehr Zeit kann sie in der Praxis in Anspruch nehmen.

In diesem Artikel besprechen wir kurz drei Möglichkeiten, die Sortierung in c zusammenzuführen. Die Variante der Zusammenführungssortierung wird als 3-Wege-Zusammenführungssortierung behandelt, die das Array in drei Teile aufteilt, anstatt es in zwei Teile aufzuteilen. Wir geben auch ein Beispiel, das mit diesem Thema zusammenhängt.