Come ordinare una lista contenente un insieme limitato di valori in tempo lineare quando la lunghezza è sconosciuta?

2

Dato un elenco di interi la cui lunghezza è sconosciuta, e ognuno dei suoi elementi è compreso tra 1 e 1000, come si ordina questo elenco in tempo lineare?

    
posta user270386 03.12.2015 - 15:42
fonte

1 risposta

12

Sai che ogni elemento del tuo int arr[]; è in [1;1000] .

Quindi disponi di una matrice di contatori, int cnt[1001]; nel linguaggio di C. Cancellalo (tutti gli zeri).

Quindi, leggi l'array arr[] in sequenza. Supponiamo di aver letto il valore x all'indice i (quindi x==arr[i] ). Quindi incrementa il suo contatore, quindi cnt[x]++;

Quando hai raggiunto la fine della matrice di input arr , esegui iterazione su cnt così for (int i=0; i<=1000; i++) e restituisci il numero i esattamente cnt[i] volte.

Questo è O (n) (perché il limite 1000 è una costante).

Questo tipo è spesso noto come conteggio degli ordinamenti .

    
risposta data 03.12.2015 - 15:50
fonte

Leggi altre domande sui tag