Sortowanie przez zliczanie
Z Wikipedii
Sortowanie przez zliczanie – metoda sortowania, wymagająca spełnienia pewnych założeń wobec sortowanych danych. Jej główną zaletą jest liniowa złożoność obliczeniowa algorytmu – O(n+k) (n – oznacza liczebność zbioru, k – liczbę różnych elementów). Największymi ograniczeniami algorytmu są konieczność uprzedniej znajomości zakresu danych i złożoność pamięciowa (wymaga dodatkowo O(k) lub O(n+k) pamięci).
Algorytm zakłada, że klucze elementów należą do skończonego zbioru (np. są to liczby całkowite z przedziału 0..100), co ogranicza możliwości jego zastosowania.
Istnieją dwie implementacje algorytmu:
- prostsza – sortująca in situ (w miejscu), zakłada, że elementy o równych kluczach są nierozróżnialne, nie mogą zatem być to klucze danych (każdy z nich jest bowiem powiązany z przenoszoną wartością – zatem, mimo iż są one równe, muszą pozostawać rozróżnialne);
- standardowa – gwarantuje stabilność i nie wymaga dodatkowego założenia. Potrzebuje natomiast O(n) więcej pamięci;
Idea algorytmu polega na sprawdzeniu ile wystąpień danego klucza występuje w sortowanej tablicy.
[edytuj] Przykładowa implementacja w języku C
[edytuj] Wersja uproszczona
Wersja ta, działa jedynie na danych całkowitoliczbowych. W przykładzie k określa zakres występujących liczb.
const int k = 77; // elementami tablicy T są liczby całkowite z // z przedziału 1..77 const int n = 1000; int T[n]; // tablica zawierająca elementy do posortowania int Tp[n]; // tablica zawierająca elementy posortowane int TPom[k]; // zawiera liczbę elementów o danej wartości int i; // zmienna pomocnicza for(i = 0 ; i < k ; ++i) TPom[i] = 0; // zerowanie tablicy for(i = 0 ; i < n ; ++i) TPom[T[i]-1]++; // po tych operacjach TPom[i] będzie zawierała // liczbę wystąpień elementów o kluczu i for(i = 1 ; i < k ; ++i) TPom[i] += TPom[i-1]; // teraz TPom[i] zawiera pozycje w posortowanej // tablicy ostatniego elementu o kluczu i for(i = n-1 ; i >= 0 ; --i) { Tp[TPom[T[i]-1]-1] = T[i]; // wstawienie elementu na odpowiednią pozycję --TPom[T[i]-1]; // aktualizacja TPom }
[edytuj] Linki zewnętrzne
| 840 osób biegiem uczciło 64.rocznicę Powstania Warszawskiego |
|
Dominika Stawczyk (KB Entre.pl Warszawa) i Bogusław Andrzejuk (Podlasie Białystok) zwyciężyli w XVIII Nocnym Biegu Powstania Warszawskiego, który miał rekordową obsadę. Dystans 10 km na terenie Akademii Wychowania Fizycznego Józefa Piłsudskiego pokonało aż 840 osób.
|
| Polskie koszykarki przegrały z Francją |
|
Reprezentacja Polski koszykarek przegrała z Francją 61:77 w drugim dniu międzynarodowego turnieju w Strasbourgu. W niedzielę, w ostatnim spotkaniu turnieju, Polki zmierzą się z Kanadą.
|
| Heidfeld: w tym Robert jest ode mnie lepszy |
|
- Obecny sezon jest dla nas niezwykle udany - mamy na koncie trzy znaczące osiągnięcia: pierwsze najszybsze okrążenie, pierwsze pole position i pierwsze zwycięstwo - powiedział w wywiadzie dla jednej z niemieckich gazet Nick Heidfeld, kierowca BMW Sauber.
|
| ME w klasie 29-er: Polacy nie obronili tytułu |
|
Brytyjczycy triumfowali w zakończonych w holenderskim Medemblik żeglarskich mistrzostwach Europy w klasie 29-er. Polska załoga Łukasz Przybytek (DKŻ Dobrzyń), Krzysztof Mongird (YK Stal Gdynia) zajęła ósme miejsce.
|
| Lubelskie szczypiornistki mistrzyniami Europy szkół wyższych |
|
Słuchaczki Wyższej Szkoły Społeczno-Przyrodniczej im. Wincentego Pola w Lublinie zostały mistrzyniami Europy szkół wyższych w piłce ręcznej.
|