logo

3 virzienu sapludināšanas kārtošana c

Šajā rakstā ir apskatīti 3 veidi, kā apvienot kārtošanu c. Sapludināšanas kārtošanā masīvs tiek rekursīvi sadalīts divās daļās, sakārtots un visbeidzot sapludināts.

Sapludināšanas kārtošanas variants tiek uzskatīts par 3 virzienu sapludināšanas kārtošanu, kas sadala masīvu trīs daļās, nevis sadala to divās daļās. Sapludināšanas kārtošana rekursīvi sadala masīvu uz pusi mazākos apakšblokos. Līdzīgi, trīsvirzienu sapludināšanas kārtošana sadala masīvu vienas trešdaļas lieluma apakšblokos.

Sapludināšanas kārtošanā masīvs tiek rekursīvi sadalīts divās daļās, sakārtots un visbeidzot sapludināts. Sapludināšanas kārtošanas variantu sauc par 3-way sapludināšanas kārtošanu, kur tā vietā, lai sadalītu masīvu divās daļās, viņš to sadala trīs daļās.

Apvienošanas kārtošanas piemēri: Sapludināšanas kārtošanas piemērs ir sniegts zemāk -

 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 

Trīsceļu sapludināšanas kārtošanas laika sarežģītība ir nlog3n.

1. piemērs: Šeit mēs sniedzam piemēru 3 veidiem, kā sapludināt kārtošanu c. Piemērs ir sniegts zemāk -

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

Kā darbojas iepriekš minētais kods?

Šeit mēs vispirms atkārtojam statistikas masīva saturu katrā citā masīvā, ko sauc par fArr. Pēc tam ierakstiet masīvu, atrodot viduspunktu, kas sadala masīvu trīs elementos un izsauc katra masīva tipa raksturlielumu. Rekursijas pamatgadījums ir tad, ja masīva izmērs ir 1 un tas tiek atgriezts no funkcijas. Pēc tam sākas masīva sapludināšana, un visbeidzot, sakārtotais masīvs atrodas fArr un tiek kopēts uz gArr.

Sapludināšanas kārtošanas laika sarežģītība:

Trīsceļu sapludināšanas kārtošanas vienādojums ir: T(n) = 2T(n/2) + O(n)

Līdzīgi trīs virzienu sapludināšanas kārtošanai mums ir: T(n) = 3T(n/3) + O(n)

Risinot ar meistara metodi, tās sarežģītība ir O(n log 3n).

Laika sarežģītība šķiet mazāka nekā divvirzienu sapludināšanas kārtošana, taču, jo vairāk salīdzinājumu sapludināšanas funkcijā, jo vairāk laika tas var aizņemt praksē.

Tāpēc šajā rakstā mēs īsi apspriežam 3 veidus, kā apvienot kārtošanu c. Sapludināšanas kārtošanas variants tiek uzskatīts par 3 virzienu sapludināšanas kārtošanu, kas sadala masīvu trīs daļās, nevis sadala to divās daļās. Mēs sniedzam arī piemēru, kas ir saistīts ar šo tēmu.