Sortowanie przez zliczanie - ostatnie elementy nie są posortowane

0

Chciałbym was prosić o pomoc. Otóż gdy próbuję posortować counting sortem 30000 elementową tablicę integerów z zakresu 1-5000, kilka ostatnich elementów nie jest w ogóle posortowanych, czy potrafilibyście wskazać błąd w moim algorytmie? Z góry dziękuję za pomoc.

MAX = 30000;
procedure countingSort(var tab:array[1..MAX] of integer);
var
    i:integer;
    tmp:array[1..5000] of integer;
    result:array[1..MAX] of integer;
begin
    for i:=1 to 5000 do tmp[i]:=0;

    for i:=1 to MAX do tmp[tab[i]] := tmp[tab[i]] + 1;

    for i:=2 to 5000 do tmp[i]:=tmp[i] + tmp[i-1];
    
    for i:=MAX downto 1 do
    begin
    	result[tmp[tab[i]]] := tab[i];
    	tmp[tab[i]] := tmp[tab[i]] - 1;
    end;    	
    
    for i:=1 to MAX do tab[i] := result[i];
end;
0
const int k = 77; // elementami tablicy T są liczby całkowite z 
                              // z przedziału 0..76
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]];               // po tych operacjach TPom[i] będzie zawierała 
                                // liczbę wystąpień elementów o kluczach mniejszych od 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]]] = T[i];   // wstawienie elementu na odpowiednią pozycję 
                                // i aktualizacja TPom

Przeanalizuj powyższy przykład (pobrany z Wikipedii) oraz np. ten czy ten i porównaj je ze swoim programem;

1 użytkowników online, w tym zalogowanych: 0, gości: 1