Tempo fa abbiamo affrontato la questione del sorting, poi ho visto due algoritmi apparentemente migliori del quicksort (che spero sia quello implementato dal sorting builtin di gm):
Radix Sort
Gravity Sort.
Ora, il gravity sort è superiperbellissimo, in pratica agita la bacchetta magica e ti ritrovi con l'array ordinato in un batter d'occhio. Però (1) non ho la più pallida idea di come funzioni, né l'ho capito, e (2) in giro si dice che questo fantomatico algoritmo sia implementabile unicamente via hardware... boh
Poi c'è il radix sort. L'ho osservato, l'ho capito, l'ho implementato... in gml!
Ora, alcune delucidazioni:
Il Radix Sort di fatto È più veloce del quicksort, e per di più da inizio a fine algoritmo non viene fatto nemmeno un singolo confronto. Sono solo una sequenza di accessi all'array da ordinare.
Dove sta la fregatura? Beh usa più ram. A quel punto, considerando che un codice blocca lo step, mi sono detto che in alcuni casi potrebbe convenire usare più ram per di contro terminare l'ordinamento più in fretta (ovvero favolette di insulsa ottimizzazione dato che nessuno metterà arrays di più di 10'000 elementi in gamemaker )
Comunque più che altro per curiosità l'ho implementato, ed ecco a voi il codice:
Spoiler
Spoiler
Si suppone che l'array passato contenga solo interi, non stringhe e che non sia vuoto. Il che tuttavia con gm non è molto limitante dato che anche un array di puntatori a istanza sarebbe comunque un array di interi
Ho implementato la variante LSD (ovvero quella che inizia ad ordinare dalla cifra meno significativa), dato che sembra la più performante.
Per meglio comprendere l'algoritmo basta cercare "radix sort explained" su youtube, questo è solo uno dei tanti:
https://www.youtube.com/watch?v=xhr26ia4k38
I hope you enjoy!!!