Perché alcuni metodi di ordinamento sono ordinati per 1, 10, 2, 3 ...?

25

Ho notato che molti metodi di ordinamento numerico sembrano ordinare per 1, 10, 2, 3 ... piuttosto che l'atteso 1, 2, 3, 10 ... Sto avendo problemi a venire con uno scenario dove avrei bisogno del primo metodo e, come utente, mi sento frustrato ogni volta che lo vedo nella pratica. Esistono casi d'uso legittimi per il primo stile rispetto al secondo? Se sì, quali sono? Altrimenti, come è nato il primo genere di stile? Quali sono i nomi ufficiali per ciascun metodo di ordinamento?

    
posta VirtuosiMedia 30.12.2011 - 03:35
fonte

4 risposte

52

che è ordinamento lessicografico che significa fondamentalmente la lingua tratta le variabili come stringhe e confronta carattere per carattere ( "200" è maggiore di "19999" perché '2' è maggiore di '1' )

per risolvere il problema puoi

  • assicurati che i valori siano trattati come numeri interi,

  • anteporre '0' alle stringhe in modo che tutte abbiano uguale lunghezza (possibile solo quando si conosce il valore massimo).
    Questo è il motivo per cui vedrai le numerazioni degli episodi sui file multimediali (S1E01) con un prefisso 0, quindi un ordinamento lessicografico non rovina tutto e permette ai programmi di riprodurli / visualizzarli semplicemente in ordine alfabetico,

  • o crea un comparatore personalizzato che per prima cosa confronta la lunghezza delle stringhe (stringhe più corte sono numeri interi più piccoli) e quando sono uguali confronta il lessicograficamente (attento a guidare '0' )

risposta data 30.12.2011 - 03:51
fonte
5

Alfabetico, 1 arriva prima 2. Ogni volta che vedi il primo metodo, non è perché è desiderabile, ma perché l'ordinamento è strettamente alfabetico (e accade da sinistra a destra, un carattere alla volta): 1 , 2, 10 ha senso per te ma non per un computer che conosce solo il confronto alfabetico. Non c'è modo in questo tipo di confronto semplice per sapere che uno seguito da un 0 in realtà viene dopo un due.

Quando vedi l'ordinamento misto di parole e numeri che tratta correttamente i numeri, è perché l'ordinamento è più intelligente, e per di più, di solito funziona solo all'inizio o alla fine di una stringa.

    
risposta data 30.12.2011 - 03:41
fonte
3

Questo è il risultato quando si ordinano le stringhe di numeri in ordine alfabetico anziché numerico.

Questo stile di ordinamento è il comportamento predefinito del comando unix sort , ad esempio, a meno che non si usi l'opzione della riga di comando --numeric-sort , che indica di tentare di interpretare i valori numerici.

    
risposta data 30.12.2011 - 03:40
fonte
3

Altri hanno risposte di questo tipo, ma nessuno risponde alla tua domanda sul perché lo vedi. La risposta non è davvero così eccitante. Di solito è un bug. La maggior parte dei metodi di ordinamento è predefinita per l'uno o l'altro e la programmazione probabilmente trascura di modificare l'impostazione predefinita durante l'ordinamento dei numeri.

    
risposta data 30.12.2011 - 19:23
fonte

Leggi altre domande sui tag