logo

3 способи сортування злиттям у c

У цій статті розглядаються 3 способи сортування злиттям у c. При сортуванні злиттям масив рекурсивно розбивається на дві частини, сортується та, нарешті, об’єднується.

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

При сортуванні злиттям масив рекурсивно розбивається на дві частини, сортується та, нарешті, об’єднується. Варіант сортування злиттям називається 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. Варіант сортування злиттям розглядається як тристороннє сортування злиттям, яке розбиває масив на три частини, а не на дві частини. Також наведемо приклад, який стосується цієї теми.