Sortowanie elementów na liście jest prozaicznym i często czasochłonnym zadaniem. Termin sortowanie ogólnie odnosi się do ułożenia elementów na liście w kolejności rosnącej lub malejącej w oparciu o wcześniej określoną relację porządkowania. Sortowanie jest często przeznaczone do wyszukiwania, które jest jego kolejną podstawową czynnością w przetwarzaniu danych. Wyobraź sobie, jak trudno byłoby wyszukać słowo w słowniku, gdyby słowa w nim nie były uporządkowane ani posortowane. Z tego powodu wpisy w słowniku są przechowywane w standardowej kolejności alfabetycznej. Liczne zadania i obliczenia stają się łatwe dzięki sortowaniu. I tutaj pojawiają się algorytmy sortowania.
Algorytm sortowania jest niczym innym, jak metodą porządkowania elementów listy w określonej kolejności, takich jak wartość od najniższej do najwyższej, od najwyższej do najniższej, rosnąca kolejność, malejąca kolejność, alfabetycznie itp. Najczęściej używane zamówienia są porządkiem numerycznym i leksykograficznym. Algorytmy często używają sortowania jako kluczowego podprogramu. Istnieje wiele różnych algorytmów sortowania, z których każdy wykorzystuje bogaty zestaw technik. Jednym z takich popularnych, ale równie potężnych algorytmów jest algorytm Dziel i rządź, który jest algorytmem opartym na rekursji z wieloma rozgałęzieniami. Szybkie sortowanie i scalanie Sortowanie to dwa powszechnie stosowane algorytmy oparte na algorytmie Dziel i Zdobywaj.
Szybkie sortowanie to wysoce wydajny, ale skuteczny algorytm sortowania oparty na podejściu dziel i zwyciężającym, który jest dość podobny do podejścia dynamicznego, w którym problem jest podzielony na dwa lub więcej podproblemów, a następnie rozwiązany rekurencyjnie. Jeśli wielkość podproblemów jest wystarczająco mała, wówczas są one rozwiązywane w prosty sposób, bez żadnych problemów. Algorytm szybkiego sortowania, zwany także sortowaniem z podziałem na partycje, dzieli listę, która ma zostać posortowana, na trzy główne części: 1) Element przestawny (elementy środkowe), 2) elementy mniejsze niż pivot i 3) elementy większe niż pivot. Sam oś jest przenoszony między dwiema grupami do jego ostatecznej pozycji, a następnie SZYBKIE SORTOWANIE jest następnie stosowane rekurencyjnie.
Scal sortowanie to kolejny algorytm sortowania ogólnego zastosowania oparty na technice dzielenia i podbijania. Jest to jeden z najbardziej szanowanych i popularnych algorytmów sortowania zaprojektowanych do efektywnego wykorzystania do sortowania danych przechowywanych zewnętrznie w pliku. Oferuje zachowanie O (n log n) w najgorszym przypadku przy użyciu dodatkowej pamięci O (n). Dzieli kolekcję „A” na dwie mniejsze kolekcje, z których każda jest następnie sortowana. W końcowej fazie te dwie posortowane kolekcje są scalane z powrotem w jedną kolekcję o rozmiarze n. To będzie posortowana lista. Algorytm jest dość szybki, a także stabilny i idealnie nadaje się do list połączonych.
- Zarówno szybkie sortowanie, jak i scalanie to algorytmy sortowania oparte na dzieleniu i podbijaniu z tą samą podstawową zasadą - w celu podzielenia problemu na dwa lub więcej pod-problemów, a następnie rozwiązania ich rekurencyjnie. Różnią się jednak procedurami łączenia i wydajnością. Szybkie sortowanie jest na ogół lepsze i szybsze niż inne algorytmy sortowania, w tym Sortuj sortowanie, jeśli chodzi o mały zestaw danych, podczas gdy Sortuj sortowanie zachowuje spójność niezależnie od typu zbiorów danych. Szybkie sortowanie jest idealnie preferowane dla tablic, podczas gdy Sortowanie jest idealnie preferowane dla połączonych list.
- Sortowanie w algorytmie szybkiego sortowania odbywa się rekurencyjnie, a każde wywołanie rekurencyjne wymaga miejsca na stosie. Nie wymaga dodatkowej przestrzeni do scalania, z wyjątkiem pojedynczej przestrzeni pamięci do scalania. Ponieważ jest to algorytm sortowania w miejscu, sortowanie nie wymaga dodatkowej przestrzeni. W rzeczywistości używa tej samej tablicy podczas dzielenia i łączenia tablicy. Z drugiej strony, w Merge Sort istnieje kilka sposobów reprezentacji danych w pliku lub w tablicy, więc potrzebuje takich obszarów roboczych, jak pod-pliki lub tablice o tym samym rozmiarze, które wymagają dodatkowej przestrzeni.
- Najgorsze zachowanie w przypadku szybkiego sortowania występuje, gdy partycjonowanie jest niezrównoważone, co zależy od elementów używanych do partycjonowania, w którym to przypadku algorytm działa asymptotycznie tak wolno, jak sortowanie wstawiania. Najgorszym przypadkiem szybkiego sortowania jest O (n2)) i pozostawia się jako ćwiczenie. Można tego jednak uniknąć, wybierając odpowiedni punkt obrotu. Z drugiej strony, najgorszy przypadek sortowania korespondencji ma miejsce, gdy musi wykonać maksymalną liczbę porównań. Biorąc pod uwagę wydajność liniową łączenia, najgorszym przypadkiem sortowania korespondencji seryjnej jest O (n log2) n).
- Chociaż zarówno algorytmy szybkiego sortowania, jak i scalania są oparte na metodzie dzielenia i podbijania podczas sortowania, różnią się one metodami stosowanymi do wykonania procedur podziału i scalania. W przypadku szybkiego sortowania większość pracy polega na podzieleniu listy na dwie podlisty, co ma miejsce przed posortowaniem podlist. W przypadku sortowania korespondencji większość pracy polega na scaleniu dwóch list podrzędnych, które mają miejsce po posortowaniu list podrzędnych. Scal sortowanie wymaga tymczasowej tablicy do scalenia dwóch pod-tablic, podczas gdy dla szybkiego sortowania nie jest wymagana dodatkowa przestrzeń, dzięki czemu jest bardziej wydajna niż sortowanie według Marge.
Zarówno algorytmy szybkiego sortowania, jak i scalania są oparte na podejściu do dzielenia i zdobywania. Różnią się jednak metodami stosowanymi do wykonania procedur podziału i scalania. Zasadniczo działają na tej samej zasadzie - dzielą problem na dwa lub więcej podproblemów, a następnie rozwiązują je rekurencyjnie. W najgorszym przypadku sortowanie według scalania jest wydajniejsze niż szybkie sortowanie, ale w obu przypadkach są one równie wydajne. Ale szybkie sortowanie zajmuje więcej miejsca niż sortowanie scalone. Tak więc szybkie sortowanie jest niewątpliwie szybsze i lepsze niż sortowanie scalone, ale staje się nieefektywne w kilku sytuacjach, na przykład w przypadku porównań.