Con quest'algoritmo puo darsi che si facciano un sacco di cicli prima di estrarre tutti i numeri, soprattutto quando sono rimasti pochi numeri da estrarre, e poi a rigor di logica non hai la certezza che tutti i numeri saranno effettivamente estratti. Tra l'altro il fatto di dover allocare tutti i numeri in un arrauy puo dare problemi di memoria se i numeri sono tanti.

Io opeterei per una lista linkata, quando estrai un numero i ti scorri la lista fino allo i-esimo elemento, lo togli dalla lista e, se MAX rappresenta il numero massimo da estrarre, decrementi MAX. Il generico elemento x coniene un numero oltre al link all'elemento successivo. Iniziaòlmente lo iesimo elemento contiene il numero i. Man mano che estrai numeri nella lista restano solo gli elementi non estratti, e ad ogni estrazioni non estrai il numero stesso, ma l'indice del prossimo elemento da considerare. In questo modo non fai piu di n estrazioni e la complessita totale è di n^2.