算法总体思路是:初始化一个存有整型0~N的数组,然后生成随机数作为索引取一个数组元素,将数组末尾的元素赋值给取走的位置,生成随机数上限减一,循环,可以保证取不到相同的数值。
public int[] get_randam(int N, int k)
{
int[] index = new int[N];
for (int i = 0; i < N; i++)
index[i] = i;
Random r = new Random();
//用来保存随机生成的不重复的k个数
int[] result = new int[k];
int site = N;//设置下限
int id;
for (int j = 0; j < k; j++)
{
id = r.Next(1, site - 1);
//在随机位置取出一个数,保存到结果数组
result[j] = index[id];
//最后一个数复制到当前位置
index[id] = index[site - 1];
//位置的下限减少一
site--;
}
return result;
}