logo

3-kierunkowe sortowanie przez scalanie w c

W tym artykule omówiono 3 sposoby sortowania przez scalanie w języku c. Podczas sortowania przez scalanie tablica jest rekurencyjnie dzielona na dwie części, sortowana i ostatecznie scalana.

Wariant sortowania przez scalanie jest traktowany jako 3-kierunkowy sortowanie przez scalanie, które dzieli tablicę na trzy części zamiast dzielić ją na dwie części. Sortowanie przez scalanie rekurencyjnie dzieli tablicę na podtablice o połowie rozmiaru. Podobnie trójstronne sortowanie przez scalanie rozkłada tablicę na podtablice o rozmiarze jednej trzeciej.

Podczas sortowania przez scalanie tablica jest rekurencyjnie dzielona na dwie części, sortowana i ostatecznie scalana. Wariant sortowania przez scalanie nazywany jest sortowaniem przez scalanie 3-kierunkowym i zamiast dzielić tablicę na dwie części, dzieli ją na trzy części.

Przykłady sortowania przez scalanie: Przykład sortowania przez scalanie podano poniżej -

 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 

Złożoność czasowa trójstronnego sortowania przez scalanie wynosi nlog3n.

Przykład 1: Tutaj podajemy przykład 3 sposobów sortowania przez scalanie w c. Przykład podano poniżej -

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

Jak działa powyższy kod?

Tutaj najpierw replikujemy zawartość tablicy statystyk do każdej innej tablicy zwanej fArr. Następnie wpisz tablicę, lokalizując punkt środkowy dzielący tablicę na trzy elementy i wywołując charakterystykę typu dla każdej tablicy. Podstawowy przypadek rekurencji ma miejsce, gdy tablica ma rozmiar 1 i jest zwracana przez funkcję. Następnie rozpoczyna się łączenie tablic, a na koniec posortowana tablica znajduje się w fArr i jest kopiowana do gArr.

Złożoność czasowa sortowania przez scalanie:

Trójczynnikowe równanie sortowania przez scalanie wygląda następująco: T(n) = 2T(n/2) + O(n)

Podobnie w przypadku trójstronnego sortowania przez scalanie mamy: T( n) = 3T(n/3) + O(n)

Rozwiązując metodą główną, jej złożoność wynosi O(n log 3n).

Złożoność czasowa wydaje się mniejsza niż dwukierunkowe sortowanie przez scalanie, ale im więcej porównań w funkcji scalania, tym więcej czasu może to zająć w praktyce.

Zatem w tym artykule pokrótce omawiamy 3 sposoby sortowania przez scalanie w c. Wariant sortowania przez scalanie jest traktowany jako 3-kierunkowy sortowanie przez scalanie, które dzieli tablicę na trzy części zamiast dzielić ją na dwie części. Podajemy również przykład powiązany z tym tematem.