Sortowanie stabilne
Ostatnio zmodyfikowano 2017-03-25 14:12
ultra Temat założony przez niniejszego użytkownika |
Sortowanie stabilne » 2017-03-24 19:44:51 Cześć, mam pytanie. Jakiego algorytmu powinienem użyć do sortowania stabilnego w czasie liniowym? |
|
karambaHZP |
» 2017-03-24 21:36:39 Co chcesz sortować? Zwykle dobrze radzi sobie std::sort z <algorithm>Możesz też potestować Algorytmy |
|
ultra Temat założony przez niniejszego użytkownika |
» 2017-03-24 22:07:07 Dzięki za info. Wolałbym nie używać std, ani gotowych funkcji.
Mam na wejściu n par liczb. Wczytuje je do tablicy i chce je posortować. Myślałem o sortowaniu bąbelkowym ale czy te sortowanie jest stabilne w czasie liniowym? |
|
karambaHZP |
» 2017-03-24 22:35:18 Złożoność algorytmów sortowania zależna jest od stopnia pomieszania. Szybciej wykona się sortowanie, gdy wystarczy zamienić jedną parę liczb, a wolniej jeśli kolejność będzie całkiem odwrotna. Zwykle najlepszym i najszybszym algorytmem jest QuickSort. W dziale algorytmów (link) opisana jest złożoność każdego z nich. Kwestia doboru odpowiedniego sortowania zależy głównie od spodziewanego stopnia wymieszania danych. Algorytmu o złożoności liniowej O(n)? Nie znam (jeszcze :)). |
|
Bielan |
» 2017-03-25 00:43:51 @ultra Wolałbym nie używać std, ani gotowych funkcji.
|
Używanie gotowych funkcji ma masę zalet. Jeżeli nie chcesz, to rozumiem, że w celach edukacyjnych? Myślałem o sortowaniu bąbelkowym ale czy te sortowanie jest stabilne w czasie liniowym?
|
Ma złożoność kwadratową a nie liniową. Nie ma sortowania o złożoności czasowej liniowej. http://cs.stackexchange.com/questions/3/why-is-quicksort-better-than-other-sorting-algorithms-in-practicehttps://en.wikipedia.org/wiki/Category:Stable_sorts@karambaHZP Zwykle dobrze radzi sobie std::sort z <algorithm>
|
To sortowanie nie jest stabilne. Stabilne jest std::stable_sort . Złożoność algorytmów sortowania zależna jest od stopnia pomieszania.
|
Nie. Złożoność algorytmów jest stała. Tak samo stałe są worst case scenario oraz best case scenario. Szybciej wykona się sortowanie, gdy wystarczy zamienić jedną parę liczb, a wolniej jeśli kolejność będzie całkiem odwrotna.
|
Ale to nie jest złożoność obliczeniowa. Kwestia doboru odpowiedniego sortowania zależy głównie od spodziewanego stopnia wymieszania danych.
|
Od stopnia wymieszania ale i od rodzaju danych czy sposobu ich porównywania. Algorytmu o złożoności liniowej O(n)? Nie znam (jeszcze :)).
|
Algorytm odczytania tablicy. |
|
Elaine |
» 2017-03-25 02:00:46 Jeśli liczby mają stałą wielkość, to radix sort jest stabilny i liniowy. |
|
ultra Temat założony przez niniejszego użytkownika |
» 2017-03-25 09:51:29 @Bielan, otóż to. Mam do napisania projekt, nie wykorzystując gotowych funkcji i std.
Dzięki za link. Czyli ogólnie najlepiej nadaje się do tego sortowanie przez zliczanie? Stabilne i ma złożoność O(n + k). Lub też jak @Alueril pisze, sortowanie pozycyjne. Które z tych jest bardziej wydajnościowe?
|
|
DejaVu |
» 2017-03-25 12:18:44 @ultra: nie kpij. Nie masz zielonego pojęcia o złożoności obliczeniowej, a chcesz dbać o wydajność. Zaimplementuj cokolwiek i najpierw zdobądź dużo doświadczenia w klepaniu kodu. Nawet jeżeli wybierzesz potencjalnie najbardziej wydajny algorytm nie oznacza to wcale, że będzie to optymalne w wykonaniu słabo kodującego dewelopera. |
|
« 1 » 2 |