求java算法:如何生成一组不重复的随机数(比如1到10)

Random类生成的随机数都会发生重复,但我想求一个随机数算法,不会产生重复的数(算法中不要用if来判定该随机数是否已出现过,否则执行效率会十会低下:举例来说生成范围是1-10,同时生成十个随机数,这样1-10每个只出现一次;如果简单只用if判定,为了生成这十个随机数,循环可能就要不只十次,可能是100,1000次,效果不好);求高人指点合适的算法;

int table[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

void swap(int* a, int* b) { // 交换两个元素
int c = *a;
*a = *b;
*b = c;
}

void rand_n(int len, n) { // 打乱table中各个元素之间的顺序
for (int i = 0; i < len; i++) {
swap(&table[i], &table[rand() / len]);
}
for (int i = 0; i < n; i++) { // 输出前n个元素
printf("%d\n", table[i]);
}
}

int main() {
rand_n(sizeof(table)/sizeof(int), 4);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-05-14
楼上的是用C语言编写的,算法一样的.你可以参照一下