我想生成an 的排列,array a
但不想使用实用程序函数,例如java.util.Collections()
.
排列应该是随机的,并且每个排列都应该可能发生 - 但不需要均匀分布的概率。
以下代码实现了这一点 - 但性能不佳:
// array holding 1,...,n
// initialized somewhere else
int[] a = new int[N];
for (int i = 0; i < a.length ; i++) {
int r = (int) (Math.random() * (i+1));
swap(r,i,a);
}
private static void swap(int j, int k, int[] array){
int temp = array[k];
array[k] = array[j];
array[j] = temp;
}
问题:
是否有可能减少用于生成排列的随机数的总数?