Wpisany przez Michał Knasiecki,
13 sierpnia 2005 10:49
Algorytm sorotwania szybkiego jest uważany za najszybszy algorytm dla danych losowych.
Zasada jego działania opiera się o metodę dziel i zwyciężaj. Zbiór danych zostaje podzielony na dwa podzbiory i każdy z nich jest sortowany niezależnie od drugiego.
Dla zadanej tablicy a[l..p] wybieramy element v=a[l] i przeszukujemy resztę tablicy (tzn. a[l+1..p]) tak długo, aż nie znajdziemy elementu większego niż a[l]. Następnie przeszukujemy tą tablicę od strony prawej póki nie znajdziemy elementu nie większego niż a[l]. Gdy to osiągniemy, zamieniamy miejscami te dwa elementy i zaczynamy cały proces od początku. Algorytm działa tak długo, aż wskaźnik poruszający się w lewo i wskaźnik poruszający się w prawo spotkają się. Należy wówczas zamienić element v=a[l] z ostatnim elementem lewej części tablicy.
Mimo, że w najgorszym przypadku algorytm ma złożoność kwadratową, jest on bardzo często stosowany. Powodem tego jest niska- liniowologarytmiczna, złożoność w średnim przypadku.
Zasada jego działania opiera się o metodę dziel i zwyciężaj. Zbiór danych zostaje podzielony na dwa podzbiory i każdy z nich jest sortowany niezależnie od drugiego.
Dla zadanej tablicy a[l..p] wybieramy element v=a[l] i przeszukujemy resztę tablicy (tzn. a[l+1..p]) tak długo, aż nie znajdziemy elementu większego niż a[l]. Następnie przeszukujemy tą tablicę od strony prawej póki nie znajdziemy elementu nie większego niż a[l]. Gdy to osiągniemy, zamieniamy miejscami te dwa elementy i zaczynamy cały proces od początku. Algorytm działa tak długo, aż wskaźnik poruszający się w lewo i wskaźnik poruszający się w prawo spotkają się. Należy wówczas zamienić element v=a[l] z ostatnim elementem lewej części tablicy.
Mimo, że w najgorszym przypadku algorytm ma złożoność kwadratową, jest on bardzo często stosowany. Powodem tego jest niska- liniowologarytmiczna, złożoność w średnim przypadku.
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Bartosz Sypytkowski | C# | .cs | .cs | ***** / 15 | |
Michał Knasiecki | C/C++ | .cpp | .cpp | ***** / 26 | |
Marian | C/C++ | C++ | .cpp | .cpp | ***** / 144 |
Jan Wojciechowski | C/C++ | C++ templates | .cpp | .cpp | ***** / 11 |
Michał Knasiecki | Delphi/Pascal | .pas | .pas | ***** / 15 | |
Tomasz Lubiński | Java | .java | .java | ***** / 30 | |
Mariusz Gumienny | JavaScript | .js | .js | ***** / 5 | |
Damian Dziedzic | Matlab | .mat | .mat | ***** / 9 | |
kiziorgd | Php | .php | .php | ***** / 3 | |
Bartosz Sypytkowski | Python | .py | .py | ***** / 10 | |
Rafał Gawlik | Python | Python2, Python3 | .py | .py | ***** / 16 |
mephisto | Ruby | .rb | .rb | ***** / 2 |
Poprawiony: 27 maja 2011 08:45
I dlaczego ta metoda jest najszybsza?