logo

c'de 3 yollu birleştirme sıralaması

Bu makale c'de sıralamayı birleştirmenin 3 yolunu tartışıyor. Birleştirme sıralamasında dizi yinelemeli olarak iki parçaya bölünür, sıralanır ve son olarak birleştirilir.

Birleştirme sıralaması çeşidi, diziyi iki parçaya bölmek yerine üç parçaya bölen 3 yollu birleştirme sıralaması olarak kabul edilir. Birleştirme sıralaması, bir diziyi yinelemeli olarak yarım boyutlu alt dizilere böler. Benzer şekilde, üç yollu birleştirme sıralaması, bir diziyi üçte bir boyutunda alt dizilere ayırır.

Birleştirme sıralamasında dizi yinelemeli olarak iki parçaya bölünür, sıralanır ve son olarak birleştirilir. Birleştirme sıralamasının bir çeşidine 3 yollu birleştirme sıralaması denir; burada diziyi iki parçaya bölmek yerine üç parçaya böler.

Birleştirme sıralamasına örnekler: Birleştirme sıralaması örneği aşağıda verilmiştir -

 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 

Üç yollu birleştirme sıralamasının zaman karmaşıklığı nlog3n'dir.

Örnek 1: Burada c'de sıralamayı birleştirmenin 3 yoluna bir örnek veriyoruz. Örnek aşağıda verilmiştir -

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

Yukarıdaki kod nasıl çalışır?

Burada ilk olarak istatistik dizisinin içeriğini fArr adı verilen diğer tüm dizilere kopyalıyoruz. Daha sonra diziyi üç öğeye bölen ve her dizide tip karakteristiğini çağıran orta noktayı bularak diziyi yazın. Özyinelemenin temel durumu, bir dizinin 1 boyutunda olması ve bir işlevden döndürülmesidir. Daha sonra dizi birleştirme başlar ve son olarak sıralanan dizi fArr'da olur ve gArr'a kopyalanır.

Birleştirme sıralamasının zaman karmaşıklığı:

Üç yollu birleştirme sıralama denklemi: T(n) = 2T(n/2) + O(n)

Benzer şekilde, üç yollu birleştirme sıralaması için şunu elde ederiz: T( n) = 3T(n/3) + O(n)

Ana yöntemle çözmenin karmaşıklığı O(n log 3n)'dir.

Zaman karmaşıklığı, iki yönlü birleştirme sıralamasından daha az görünür, ancak birleştirme işlevinde ne kadar çok karşılaştırma yapılırsa, pratikte o kadar fazla zaman alabilir.

Bu makalede, c'de sıralamayı birleştirmenin 3 yolunu kısaca tartışıyoruz. Birleştirme sıralaması çeşidi, diziyi iki parçaya bölmek yerine üç parçaya bölen 3 yollu birleştirme sıralaması olarak kabul edilir. Bu konuyla ilgili bir örnek de veriyoruz.