Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
2 Sortowanie przez zliczanie Iwona i Ireneusz Bujnowscy
Sortowanie przez zliczanie Przedstawione dotychczas algorytmy sortowania działały stosunkowo wolno. Zarówno sortowanie bąbelkowe jak i sortowanie przez wybieranie były klasy O(n 2 ), to znaczy, że aby wykonać sortowanie n elementów należy wykonać około n 2 operacji dominujących. Okazuje się, że możliwe jest znacznie szybsze uporządkowanie elementów: klasy O(n),. Jedną z takich metod sortowania jest sortowanie przez zliczanie
Jak działa sortowanie przez zliczanie Najłatwiej będzie to prześledzić na bardzo prostym przykładzie mamy dana tablicę T do posortowania (dana powyżej) tworzymy pomocniczą tabele Pom wypełnioną zerami (rozmiar tablicy Pom jest uzależniony od zakresu danych w tablicy T) w naszym przypadku zakres od 0 do 3 czyli tablica Pom[4] indeksy Pom[4] wartości Pom[4]
Jak działa sortowanie przez zliczanie cd Realizujemy pętle: ( n –wymiar tablicy T) for (int k=0; k<n; k++) Pom[T[k]]++; obok przedstawiona jest wizualizacja jak zmienia się tablica pomocnicza Pom w trakcie działania powyższej pętli: dla k=0 T[0]=2 czyli Pom[T[0]]=Pom[2]=1 dla k=1 T[1]=0 czyli Pom[T[1]]=Pom[0]=1 dla k=2 T[2]=3 czyli Pom[T[2]]=Pom[3]=
Jak działa sortowanie przez zliczanie cd Realizujemy pętle cd: for (int k=0; k<n; k++) Pom[T[k]]++; dla k=3 T[3]=3 czyli Pom[T[3]]=Pom[3]=2 dla k=4 T[4]=0 czyli Pom[T[4]]=Pom[0]=2 dla k=5 T[5]=3 czyli Pom[T[5]]=Pom[3]=
Jak działa sortowanie przez zliczanie cd Tablica T: Tablica Pom wygląda następująco: następnie realizujemy pętle, która z tablicy Pom wypisuje indeksy tyle razy ile wynosi wartość poszczególnych elementów tablicy Pom –(z- zakres, wymiar tablicy pom) for (int j=0; j<z; j++) for (int l=0; l<Pom[j]; l++) cout<<j<<” ”; Po zrealizowaniu powyższych pętli otrzymamy :
sortowanie przez zliczanie Wady i zalety sortowania przez zliczanie –główną zaletą tej metody jest liniowa złożoność obliczeniowa algorytmu – O(n+k) (n – oznacza liczebność zbioru, k – rozpiętość danych, czyli w przypadku liczb całkowitych: powiększoną o 1 różnicę między maksymalną, a minimalną wartością, –największymi ograniczeniami algorytmu są konieczność uprzedniej znajomości zakresu danych i złożoność pamięciowa