Prima di tutto nota che l'ordinamento è il problema più studiato in CS. E per una buona ragione. A un certo punto la maggior parte del tempo del computer è andato in cernita. Probabilmente le ricerche di hash superano quelle odierne, ma mi aspetto che l'ordinamento sia ancora nei primi 2 utilizzi produttivi del tempo di CPU. (Se hai a che fare con big data set, è quasi certamente il numero # 1.)
Quindi ci sono molti algoritmi di ordinamento e le persone hanno studiato esattamente quando ognuno è il migliore. È stato analizzato pesantemente tutto ciò che si può pensare dal costo di una errata previsione delle filiali alla velocità di accesso a diversi tipi di archiviazione dei dati. Le persone hanno provato un sacco di cose e hanno trovato ruoli utili per loro. Sì, anche selezione sort.
Per le piccole liste, quicksort è stato a lungo il preferito. In questi giorni Timsort sta guadagnando popolarità (usato di default in Python e Java). Sono stati usati molti, molti altri algoritmi di ordinamento e, in generale, qualunque sia l'impostazione predefinita nella tua lingua non si rivelerà un collo di bottiglia.
Per i set di dati di grandi dimensioni, il chiaro vincitore è l'unisci sort. La sua capacità di trasmettere dati (che funziona bene con dischi di grandi dimensioni), la facilità di parallelizzazione e la mancanza di hot spot gli danno una grande spinta. Naturalmente ci sono molti dettagli che devi capire. E così ci sono molti diversi tipi specifici che vengono utilizzati, ma sotto il cofano quelli buoni sono schiaccianti basati sull'unione sort.
Vedi link per un'immagine di ciò che è possibile nella fascia alta e le descrizioni di come lo fanno.
Ogni serio linguaggio di programmazione ha incorporato algoritmi di ordinamento. Per le piccole liste dovresti semplicemente usarlo e starai bene. Se i tuoi dati sono più grandi, usa l'utilità di ordinamento Unix (che, per i dati di grandi dimensioni, sarà un ordinamento di fusione sotto il cofano). Se i tuoi dati sono così grandi da dover essere parallelizzati, dovresti trovare qualcosa di pre-costruito per il tuo caso d'uso. (I framework MapReduce usano sort internamente, quindi Hadoop è spesso "abbastanza buono".) Se alcuni altri usi non sono soddisfatti da questi tre casi d'uso, la mia esperienza dice che probabilmente applicherete qualche variazione su un ordinamento di tipo merge.