logo

3-посочно сортиране чрез сливане в c

Тази статия обсъжда 3 начина за обединяване на сортиране в c. При сортиране чрез сливане масивът се разделя рекурсивно на две части, сортира се и накрая се обединява.

Вариантът на сортиране чрез сливане се третира като 3-посочно сортиране чрез сливане, което разделя масива на три части, вместо да го разделя на две части. Сортирането чрез сливане рекурсивно разделя масив на подмасиви с половин размер. По подобен начин тристранното сортиране чрез сливане разлага масив на подмасиви с една трета от размера.

При сортиране чрез сливане масивът се разделя рекурсивно на две части, сортира се и накрая се обединява. Вариант на сортиране чрез сливане се нарича 3-посочно сортиране чрез сливане, където вместо да разделя масива на две части, той го разделя на три части.

Примери за сортиране чрез сливане: Примерът за сортиране чрез сливане е даден по-долу -

 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. Вариантът на сортиране чрез сливане се третира като 3-посочно сортиране чрез сливане, което разделя масива на три части, вместо да го разделя на две части. Даваме и пример, който е свързан с тази тема.