logo

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 

Временска сложеност тросмерног сортирања спајањем је нлог3н.

Пример 1: Овде дајемо пример 3 начина за спајање сортирања у ц. Пример је дат у наставку -

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

Како функционише горњи код?

Овде прво реплицирамо садржај низа статистике у сваки други низ који се зове фАрр. Затим откуцајте низ тако што ћете лоцирати средњу тачку која дели низ на три елемента и позива карактеристику типа у сваком низу. Основни случај рекурзије је када низ има величину 1 и враћа се из функције. Затим почиње спајање низа, и коначно, сортирани низ је у фАрр и копира се у гАрр.

Временска сложеност сортирања спајањем:

Тросмерна једначина сортирања спајањем је: Т(н) = 2Т(н/2) + О(н)

Слично, за тросмерно сортирање спајањем, имамо: Т( н) = 3Т(н/3) + О(н)

Решавање мастер методом, његова сложеност је О(н лог 3н).

Временска сложеност изгледа мања од двосмерног сортирања спајањем, али што је више поређења у функцији спајања, то би више времена могло да потраје у пракси.

Дакле, у овом чланку укратко разматрамо 3 начина спајања сортирања у ц. Варијанта сортирања спајањем се третира као тросмерно сортирање спајањем које дели низ на три дела уместо да га дели на два дела. Дајемо и пример који је везан за ову тему.