/**
* 隨機抽取[0,n)之前的k個不同的數並隨機排序,(k<=n)
*
* @param n
* @param k
* @return 隨機排序的數組,長度爲k
*/
public static int[] getRandomArray(int n, int k) {
if (k > n) {
k = n;
}
int[] rets = new int[k]; // 保存取出的隨機數
int[] array = new int[n];// 定義初始數組
for (int i = 0; i < n; i++)
array[i] = i;
Random random = new Random();
for (int j = 0; j < k; j++) {
int index = j + random.nextInt(n - j);// 生成一個[j,n)之間的隨機數,作爲數組下標
// 交換array[j]和array[index],那麼array[0..j]爲已經獲取到的隨機數
int temp = array[index];
array[index] = array[j];
array[j] = temp;
// 把此次獲取到的隨機數存到rets裏面
rets[j] = temp;
}
return rets;
}
來自《編程珠璣(第二版)》第一章習題4