定義打亂:對於一個數,它隨機跟其它位置或其本身位置交換
定義一個數組的打亂:數組中每一個數都被打亂成爲數組的打亂
import java.util.Random;
/**
* 參考自Java Collection源碼
* 定義打亂:對於一個數,它隨機跟其它位置或其本身位置交換
* 定義一個數組的打亂:數組中每一個數都被打亂成爲數組的打亂
*/
class Shuffle {
public static void swap(int[] array, int aPos, int bPos) {
int t = array[aPos];
array[aPos] = array[bPos];
array[bPos] = t;
}
/**
* 被打亂的數都放到右邊,沒有打亂的數都在左邊,從而做到每個數都被打亂一次
*/
public static void shuffle(int[] array) {
Random random = new Random();
for (int i = array.length - 1; i > 0; i--) {
swap(array, i, random.nextInt(i + 1));
}
}
/**
* 這種方式是錯誤的,因爲存在同一個數多次被打亂的情況,而根據for循環,總共有length次打亂,同一個數被多次打亂就一定有數字沒有被打亂
*/
public static void WrongShuffle(int[] array) {
Random random = new Random();
for (int i = 0; i < array.length; i++) {
swap(array, i, random.nextInt(array.length));
}
}
}
常見錯誤是:數組裏存在數字沒有被打亂