Il tuo approccio simil-mergesort sembra molto ragionevole. Più in generale, questo tipo di algoritmo di ordinamento è chiamato external sorting algorithm. Questi algoritmi funzionano spesso come descritto in precedenza, caricando in memoria alcuni sottoinsiemi di dati, ordinandoli e quindi riscrivendoli su disco. Alla fine, usa un algoritmo di fusione per unire di nuovo tutto. La scelta di quanto caricare e quale algoritmo di ordinamento utilizzare di solito sono le preoccupazioni dominanti. Mi concentrerò principalmente sulla scelta dell'algoritmo di ordinamento.
I tuoi dubbi circa il comportamento peggiore di quicksort sono in genere niente di cui preoccuparsi, poiché se si sceglie il pivot in modo casuale, la probabilità di ottenere un runtime veramente scadente è bassa. La strategia di pivot casuale funziona bene anche se i dati sono già ordinati, poiché non ha input di caso peggiore (a meno che qualcuno non conosca il generatore di numeri casuali e il seed). Puoi anche utilizzare una variante quicksort come introsort, che non ha il comportamento peggiore, come l'algoritmo di ordinamento per evitare questo caso peggiore.
Detto questo, dal momento che si sa che i dati sono già parzialmente ordinati, si consiglia di esaminare uno adaptive sorting algorithm per il passaggio di ordinamento. Hai menzionato l'insertion sort per questo, ma ci sono algoritmi adattivi molto migliori là fuori. Se la memoria è scarsa (come hai descritto), potresti provare a esaminare l'algoritmo smoothsort, che ha il runtime O (n) best-case, il tempo di esecuzione peggiore O (n log n), e usa solo O (1) memoria. Non è così adattivo come altri algoritmi (come Python timsort, natural mergesort o Cartesian tree sort), ma ha un utilizzo di memoria inferiore. Inoltre, non è veloce come un buon quicksort, ma se i dati sono in gran parte ordinati, può fare abbastanza bene.
Spero che questo aiuti!
È questo compito? Ha un'aria di compiti a casa. –
dovresti considerare di metterlo nella sezione programmatori. – Rudy
no, revisione delle strutture dati. Ho appena trovato alcune lezioni fantastiche su you tube, da UCBerkley e sto cercando di esercitarmi con algoritmi di ordinamento. – FranXh