Właśnie przeczytałem o cyclesort za pośrednictwem postu na blogu sortvis.org. Jest to prawdopodobnie najbardziej niejasny, o jakim dotąd słyszałem, ponieważ wykorzystuje matematykę, której nie znam (wykrywanie cykli w permutacjach zbiorów liczb całkowitych).
Jaki jest najbardziej niejasny, jaki znasz?
algorithms
sorting
sova
źródło
źródło
Odpowiedzi:
Słyszałeś kiedyś o sortowaniu cierpliwości ? Cóż, teraz masz ...
źródło
Slowsort działa przez pomnożenie i poddanie się (w przeciwieństwie do dzielenia i podbijania). Jest to interesujące, ponieważ jest to prawdopodobnie najmniej wydajny algorytm sortowania, który można zbudować (asymptotycznie i z zastrzeżeniem, że taki algorytm, choć powolny, musi cały czas dążyć do osiągnięcia rezultatu).
To równoważy go z bogosortem, ponieważ w najlepszym przypadku bogosort jest dość wydajny - mianowicie, gdy tablica jest już posortowana. Slowsort nie „cierpi” na takie najlepsze zachowanie. Nawet w najlepszym przypadku nadal ma czas działania dla ϵ > 0.
Oto jego pseudokod, zaadaptowany z niemieckiego artykułu w Wikipedii :
źródło
Nie wiem, czy liczy się to jako niejasne, ale jednym z najbardziej absurdalnych „algorytmów” sortowania jest Bogosort . Linki na stronie Bogosort też są fajne.
I jest ten klejnot z sekcji „sortowanie bogactw kwantowych”.
Hmmm ... można tak powiedzieć :-).
źródło
Kolejnym niejasnym „algorytmem” jest Inteligentne sortowanie projektów - ale żaden algorytm nie jest szybszy lub ma mniejsze zużycie pamięci :)
źródło
Sortowanie snu jest raczej nowatorskie.
źródło
Myślę, że rodzaj bąbelków byłby również złą odpowiedzią w tej sytuacji
:)
źródło
Knuth Tom 3 1 , w odpowiedzi na jedno z ćwiczeń, przedstawia implementację bezimiennego algorytmu sortowania, który jest w zasadzie starożytnym golfem kodowym - najkrótszym rodzajem, jaki można napisać w asemblerze MIX. Krótki kod jest dostępny w tak nieistotnej cenie złożoności O (N 3 ) ...
1 Przynajmniej w starszych wersjach. Biorąc pod uwagę modyfikacje MIXAL-a dla nowej edycji, nie jestem pewien, czy nadal tam jest, czy nawet nie ma najmniejszego sensu w oryginalnym MIXAL-u.
źródło
W mojej klasie struktur danych musiałem (wyraźnie) udowodnić poprawność sortowania Stooge . Ma czas działania O (n ^ {log 3 / log 1,5}) = O (n ^ 2,7095 ...).
źródło
Nie wiem, czy jest to najbardziej niejasne, ale rodzaj spaghetti jest jednym z najlepszych w sytuacjach, w których można go użyć.
źródło
Jedna z oryginalnych książek Knutha „Sortowanie i wyszukiwanie” miała środkowy rozkład, który przedstawiał proces sortowania pliku taśmy bez użycia dysku twardego. Myślę, że używał sześciu napędów taśmowych i wyraźnie pokazał, kiedy każdy był czytany do przodu, do tyłu, do tyłu lub bezczynnie. Dziś jest pomnikiem przestarzałej technologii.
źródło
Kiedyś zrobiłem sortowanie bąbelkowe rejestrów wektorowych w asemblerze CRAY. Maszyna miała instrukcję podwójnej zmiany, która pozwoliła na przesunięcie zawartości rejestru wektorowego w górę / w dół o jedno słowo. Umieść co drugi punkt w dwóch rejestrach wektorowych, abyś mógł wykonać pełne sortowanie bąbelkowe bez konieczności tworzenia kolejnego odniesienia do pamięci, dopóki nie skończysz. Z wyjątkiem natury sortowania bąbelkowego N ** 2 była ona wydajna.
Raz też musiałem zrobić jakikolwiek zmiennoprzecinkowy wektor długości 4 tak szybko, jak to możliwe dla pojedynczego sortowania. Zrobiłem to przez przeglądanie tabeli (bit znaku A2-A1 jest jednym bitem, znak A3-A1 tworzy kolejny bit ..., a następnie wyszukujesz wektor permutacji w tabeli. To było w rzeczywistości najszybsze rozwiązanie, jakie mogłem wymyślić z. Nie działa jednak dobrze na nowoczesnych architekturach, jednostki pływające i liczby całkowite są zbyt rozdzielone.
źródło
Google Code Jam miał problem z algorytmem o nazwie Gorosort, który, jak sądzę, wymyślił dla tego problemu.
http://code.google.com/codejam/contest/dashboard?c=975485#s=p3
źródło
Nie pamiętam nazwy, ale było w zasadzie
źródło
Sortowanie w skorupkach
Może sam algorytm nie jest tak niejasny, ale kto może nazwać implementację, która faktycznie jest używana w praktyce? Mogę!
TIGCC (kompilator oparty na GCC dla kalkulatorów graficznych TI-89/92 / V200) używa sortowania Shell do
qsort
implementacji w swojej standardowej bibliotece:Wybrano sortowanie powłoki na rzecz szybkiego sortowania, aby utrzymać niski rozmiar kodu. Chociaż jego asymptotyczna złożoność jest gorsza, TI-89 nie ma dużo pamięci RAM (190 KB, minus rozmiar programu i całkowity rozmiar niezarchiwizowanych zmiennych), więc można bezpiecznie założyć, że liczba elementów będzie być nisko.
Szybsze wdrożenie zostało napisane po tym, jak narzekałem, że jest zbyt wolny w pisanym przeze mnie programie. Wykorzystuje lepsze rozmiary szczelin wraz z optymalizacjami montażu. Można go znaleźć tutaj: qsort.c
źródło