created by Robert Floyd
initialize set S to empty
for J := N-M + 1 to N do
T := RandInt(1, J)
if T is not in S then
insert T in S
else
insert J in S
这里N是随机数范围的最大值,M是要选取的随机数的数量
伪代码来源:Jon Bentley's Programming Pearls column "A sample of Brilliance"