Szybkie sortowanie w porównaniu z sortowaniem

Szybkie sortowanie w porównaniu z sortowaniem

„Celem tego artykułu jest podanie podobieństw i różnic między szybkim sortym. Artykuł „Szybki sort w C” lub podobny tytuł został już napisany dla Linuxhint.com/. Tytuł można wpisać w polu wyszukiwania Linuxhint.Strona główna COM, aby dotrzeć do artykułu. Kolejny artykuł „scal sort w C” lub podobny tytuł, został już napisany dla Linuxhint.com/. Tytuł można wpisać w polu wyszukiwania Linuxhint.Strona główna COM, aby dotrzeć do artykułu. Czytelnikowi zaleca się odniesienie do tych dwóch artykułów, podczas gdy on/ona czyta to.

Szybkie sortowanie to algorytm sortowania. Sortowanie to kolejny algorytm sortowania. Kod dwóch artykułów wymienionych powyżej jest napisany w C. Kod tego artykułu jest również napisany w C. Czytelnik powinien być tego świadomy. W tym artykule rozważane jest sortowanie wznoszenia w przypadku obu algorytmów sortowania."

Treść artykułu

    - Wprowadzenie - patrz wyżej
    - Algorytmy do szybkiego sortowania i scalania
    - Notacja Big-O (N), O (N2) i O (n.log (n))
    - Porównanie szybkiego sortowania i scalania sortowania
    - Wniosek

Algorytmy do szybkiego sortowania i scalania
Algorytm dla Quicksort

1) Jeśli na liście jest tylko jeden element lub brak. Jeden element oznacza, że ​​lista jest już posortowana. Zero elementu oznacza, że ​​nie ma nic do sortyzacji.
2) Z inteligentnym przypuszczeniem, wybierz odpowiedni element na liście jako Out.
3) Partycja (podziel) Lista na trzy podlity. Spraw, aby wszystkie elementy lewej podwodności są mniej niż obrotowi. Lista centralna ma tylko jeden element, czyli obrotu. Spraw, aby wszystkie elementy na prawej podwodności były większe niż obrot. Umieszczając elementy po lewej stronie, które są mniejsze niż obrotowe, i elementy po prawej, które są większe niż obrotowe, bez czystego sortowania, które już jest pewne sortowanie (w szerokim sensie).
4) rekurencyjnie dziel każdą podpisę (po lewej i prawej) na trzy, jak na powyższym etapie, przy czym każdy zestaw trzech podpisów ma własne nowe obrotowe (z listy jednego elementu), dopóki nie będzie cała podana lista doskonale posortowany.

Istnieją różne formularze kodowania dla kroku 2. Lepszy formularz kodowania doprowadzi do szybszego pełnego sortowania.
Istnieją różne formularze kodowania dla kroku 3. Lepszy formularz kodowania doprowadzi do szybszego pełnego sortowania.

Algorytm dla Scalesort

1) Jeśli na liście jest tylko jeden element lub brak. Jeden element oznacza, że ​​lista jest już posortowana. Zero elementu oznacza, że ​​nie ma nic do sortyzacji.
2) rekurencyjnie dziel listę i jej podmioty na dwie połowy, aż każda sub-lista nie ma tylko jednego elementu.
3) Sortowanie pary pod-list.

Jest to normalny sposób na scalanie i tak naprawdę nie daje miejsca, dla różnych segmentów kodu, w tym samym celu, jak Quicksort.

Notacja Big-O (N), O (N2) i O (n.log (n))

NA)
Rozważ następujący kod:

int n = 8;
int sum = 0;
int a [] = 1, 2, 3, 4, 5, 6, 7, 8;
dla (int i = 0; isum = sum + a [i];

printf („%d \ n”, suma);

n = 8. Wyjście, suma to 36. W przypadku pętli jest jedna operacja wykonywana 8 razy. W notacji Big-O, ta prędkość (złożoność czasu) jest napisana jako,

NA)

Rozważ następujący podobny kod, w którym dodawane są tylko liczby nieparzyste:

int n = 8;
int sum = 0;
int a [] = 1, 2, 3, 4, 5, 6, 7, 8;
dla (int i = 0; isum = sum + a [i];

printf („%d \ n”, suma);

Wyjście, suma tym razem, wynosi 16. W pętli, jedna operacja jest wykonywana 4 razy, czyli N/2 razy. W notacji Big-O prędkość (złożoność czasu) jest nadal pisana jako O (N). Maksymalna liczba możliwych operacji jest rozważana.

NA2)

Rozważ następujący kod, który dodaje matrycę o liczbach 8 na 8:

int n = 8;
int sum = 0;
int a [] = 1, 2, 3, 4, 5, 6, 7, 8;
dla (int i = 0; ifor (int j = 0; jsum = sum + a [j];


printf („%d \ n”, suma);

Wyjście, suma, wynosi 288. W przypadku pętli istnieje jedna operacja wykonywana 8 x 8 razy = 64 razy. W notacji Big-O, ta prędkość (złożoność czasu) jest napisana jako,

O (N²)

Rozważ następujący podobny kod, w którym dodaje się tylko liczby nieparzyste macierzy:

int n = 8;
int sum = 0;
int a [] = 1, 2, 3, 4, 5, 6, 7, 8;
dla (int i = 0; ifor (int j = 0; jsum = sum + a [j];


printf („%d \ n”, suma);

Wyjście, suma tym razem, wynosi 64. W pętli, jedna operacja jest wykonywana 4 x 4 razy = 16 razy, czyli n2/4 razy. Jest to ponad 8 razy (więcej niż n razy), ale mniej niż 64 razy (mniej niż n2 czasy). W notacji Big-O, ta prędkość (złożoność czasu) można nadal zapisać jako O (n2). Maksymalna liczba możliwych operacji jest rozważana.

Tutaj nie myl sumę, 64, i liczbę operacji, 16. Ten przypadek 16 operacji, między 8 (n) a 64 (n2), nadal można zapisać, jak w poniższym podrozdziale.

NA.log (n))

Rozważ sytuację macierzy 8 na 8, w której całkowita liczba operacji wynosi 24. 24 można postrzegać jako mniej więcej w środku, między 8 (n) a 64 (n2).

Teraz,

24 = 8xlog2(8)
=> 24 = 8xlog2(23)
=> 24 = 8 × 3

Teraz porównaj,

24 = 8xlog2(8)
z
24 = n.dziennik2(N)

Dla maksymalnie n2, Gdy całkowita liczba operacji wynosi między N i N2, I wokół ich środka, w notacji Big-O, ta prędkość (złożoność czasu) jest lepiej napisana jako n.dziennik2(n) zamiast O (n2).

Porównanie szybkiego sortowania i scalania sortowania
Liczba kroków w algorytmie

Z góry Quicksort ma 4 kroki w swoim algorytmie, podczas gdy Mergesort ma 3 kroki w swoim algorytmie.

Różne sposoby kodowania

Szybki sort ma różne sposoby kodowania, a sortowanie ma tylko jeden główny sposób kodowania.

Złożoność czasu

Złożoność czasu dla scalania wynosi n.dziennik2(N). Jego prędkość jest porównywalna z funkcją sortowania biblioteki C ++ używanej do celów komercyjnych.

Gdy do piaskowca stosuje się medianę funkcji obrotu, złożoność czasu wynosi około 1.188n.dziennik2(n), wyższe niż scalsort, zakładając, że stosuje się funkcję dobrej partycji. Wiele programów Quicksort ma większą złożoność czasu. Najgorsza złożoność czasowa dla Quicksort jest O (n2). Jeśli jednak program Quicksort jest dobrze zakodowany z bardzo dobrymi segmentami kodu, pokonałby scales z prędkością.

Wniosek

Quicksort normalnie działa wolniej niż scal się.