如何打亂一個數組--數組shuffle實現及常見錯誤

定義打亂:對於一個數,它隨機跟其它位置或其本身位置交換

定義一個數組的打亂:數組中每一個數都被打亂成爲數組的打亂

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));
        }
    }
}

常見錯誤是:數組裏存在數字沒有被打亂

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章