生成前n个自然数的随机排列的最有效方法是什么?

Abh*_*tra 1 algorithm implementation probability permutation random-sample

到目前为止,我一直在使用一个列表来跟踪遇到的所有唯一数字.我使用随机数生成器来获得1到n之间的随机数.如果那个数字已经在我的列表中,那么我只是继续生成随机数,直到我遇到一个不在我的列表中的数字.当我得到一个不在我的列表中的新号码时,我将其添加到我的列表中并重复该过程,直到列表中的所有"n"号都存在.

显然,这种方法效率很低.有人可以提出一个有效的解决方案??

Hig*_*ark 5

Knuth是你的男人,虽然有其他算法可用.