Quando si mantiene ordinata la lista vettoriale mentre si inseriscono gli elementi uno alla volta, si esegue fondamentalmente un ordinamento di inserimento, che in teoria esegue O (n^2) nel peggiore dei casi. Anche il caso medio è quadratico, il che rende l'inserimento non pratico per l'ordinamento di grandi matrici.
Con l'input di ~ 30000, sarà meglio prendere tutti gli input e quindi ordinarlo con un algoritmo di ordinamento più veloce.
EDIT: Come @Veritas ha sottolineato, possiamo utilizzare un algoritmo più veloce per cercare la posizione per l'elemento (come la ricerca binaria). Quindi l'intero processo richiederà tempo O (nlg (n)). Anche se, può anche essere sottolineato che qui l'inserimento degli elementi è anche un fattore da prendere in considerazione. Il caso peggiore per l'inserimento di elementi richiede O (n^2) che è ancora il tempo di esecuzione complessivo se vogliamo mantenere ordinato l'array.
L'ordinamento dopo l'input è ancora di gran lunga il metodo migliore piuttosto che mantenerlo ordinato dopo ogni iterazione.
Né. Usa 'std :: set'. Modifica: a meno che non si desideri inserire tutti gli oggetti, quindi ordinarli e quindi non modificare mai più il contenitore. In tal caso, basta usare un vettore e ordinarlo una volta. – Thomas
@Nick: sì, 'set' è _always_ ordinato. Forse stai pensando a 'unordered_set'? –
'std :: vector' e' std :: sort' probabilmente saranno molte volte più veloci di 'std :: set'. Entrambi sono 'O (N log N)' ma il vettore usa meno memoria ed è contiguo in memoria. – MSalters