logo

מיזוג תלת כיווני מיון ב-c

מאמר זה דן ב-3 דרכים למיזוג מיון ב-c. במיון מיזוג, המערך מחולק באופן רקורסיבי לשני חלקים, ממוין ולבסוף מתמזג.

וריאנט מיון המיזוג מטופל כמיון תלת כיווני המפצל את המערך לשלושה חלקים במקום לפצל אותו לשני חלקים. מיון מיזוג מפצל באופן רקורסיבי מערך לתת-מערכי חצי בגודל. באופן דומה, מיון מיזוג תלת כיווני מפרק מערך למערכים משנה בגודל שליש.

במיון מיזוג, המערך מחולק באופן רקורסיבי לשני חלקים, ממוין ולבסוף מתמזג. וריאנט של מיון מיזוג נקרא מיון מיזוג תלת כיווני, כאשר במקום לפצל את המערך לשני חלקים, הוא מפצל אותו לשלושה חלקים.

דוגמאות למיון המיזוג: הדוגמה של מיון מיזוג ניתנת להלן -

 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 

מורכבות הזמן של מיון מיזוג תלת כיווני היא nlog3n.

דוגמה 1: כאן, אנו נותנים דוגמה ל-3 דרכים למיזוג מיון ב-c. הדוגמה ניתנת להלן -

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

איך עובד הקוד שלמעלה?

כאן אנו משכפלים תחילה את התוכן של מערך הסטטיסטיקה לכל מערך אחר שנקרא fArr. לאחר מכן הקלד את המערך על ידי איתור נקודת האמצע המחלקת את המערך לשלושה אלמנטים וקוראת למאפיין הסוג בכל מערך. המקרה הבסיסי של רקורסיה הוא כאשר למערך יש גודל 1 והוא מוחזר מפונקציה. לאחר מכן מתחיל מיזוג המערך, ולבסוף, המערך הממוין נמצא ב-fArr והועתק ל-gArr.

מורכבות הזמן של מיון המיזוג:

משוואת מיון מיזוג תלת כיוונית היא: T(n) = 2T(n/2) + O(n)

באופן דומה, עבור מיון מיזוג תלת כיווני, יש לנו: T(n) = 3T(n/3) + O(n)

פתרון בשיטת המאסטר, המורכבות שלה היא O(n log 3n).

מורכבות הזמן נראית פחות ממיון מיזוג דו-כיווני, אבל ככל שיותר השוואות בפונקציית המיזוג, כך זה עשוי לקחת יותר זמן בפועל.

אז, במאמר זה, אנו דנים בקצרה ב-3 דרכים למיזוג מיון ב-c. וריאנט מיון המיזוג מטופל כמיון תלת כיווני המפצל את המערך לשלושה חלקים במקום לפצל אותו לשני חלקים. אנו נותנים גם דוגמה שקשורה לנושא זה.