2010-04-12 19 views
7

jeśli tablica o rozmiarze n ma tylko 3 wartości 0, 1 i 2 (powtarzane dowolną liczbę razy), jaki jest najlepszy sposób ich sortowania. najlepiej wskazuje na złożoność. rozważyć przestrzeń i czas złożoność zarównotablica sortowania o rozmiarze n

+0

Co robi najlepiej znaczy w tym przypadku? – EvilTeach

+0

Zależy od tego, co masz na myśli przez "najlepszy" - najwygodniejszy? najszybszy ? najbardziej wydajne pod względem przechowywania? najbardziej przenośny? –

Odpowiedz

24

Policz wystąpień każdego numeru, a potem wypełnić tablicę z poprawnymi liczy, to O(n)

+0

aka Liczenie Sortowanie: http://en.wikipedia.org/wiki/Counting_sort –

+0

sortowania typu szufladka, znany również jako sortowanie radix. – falstro

+0

@ Andreas wartość n może być dość duża, więc zliczanie może być nieco kłopotliwe w niektórych przypadkach –

2

Nietestowane rozwiązanie C-style:

int count[3] = {0, 0, 0}; 

for (int i = 0; i < n; ++i) 
    ++count[array[i]]; 

int pos = 0; 
for (int c = 0; c < 3; ++c) 
    for (int i = array[c]; i; --i) 
     array[pos++] = c; 
+2

"unsigned" lub "size_t" będą bardziej odpowiednie. – GManNickG

1

Haskell dwa-liner:

count xs = Map.toList $ Map.fromListWith (+) [ (x, 1) | x <- xs ] 

countingSort xs = concatMap (\(x, n) -> replicate n x) (count xs) 

> countingSort [2,0,2,1,2,2,1,0,2,1] 
[0,0,1,1,1,2,2,2,2,2] 
Powiązane problemy