Potresti utilizzare un array popolato con numeri distinti , per es un array di nome Ar con indici da 1 a 999, e
procedere estraendo casualmente gli indici come segue;

- alla prima estrazione consideri il range di indici da 1 a 999 e supponiamo esca il 10;
Ar(10) è il primo numero estratto che scambi di posto con Ar(999)

- alla seconda estrazione consideri il range di indici da 1 a 998 (così sei sicuro di escludere quello già estratto)
e supponiamo esca ancora il 10;
Ar(10) è il secondo numero estratto che scambi di posto con Ar(998)

... e così via fino alla fine .

Al termine avrai in Ar i numeri causali e distinti con il primo estratto all'ultimo indice, il secondo estratto al penultimo etc...

HTH
HTH