首頁 >web前端 >js教程 >如何使用 Fisher-Yates 演算法在 JavaScript 中有效地打亂數組?

如何使用 Fisher-Yates 演算法在 JavaScript 中有效地打亂數組?

DDD
DDD原創
2024-12-27 21:24:17377瀏覽

How Can I Efficiently Shuffle an Array in JavaScript Using the Fisher-Yates Algorithm?

使用 Fisher–Yates 演算法進行高效能數組改組

在 JavaScript 中,數組改組是隨機化或遊戲開發中經常使用的常見操作。為了有效地對數組進行洗牌,流行的 Fisher–Yates 演算法提供了一種有效的方法。

Fisher–Yates 演算法實作

此演算法背後的核心原理是重複交換數組中隨機選擇的元素元素。這個過程一直持續到所有元素都被交換為止。以下程式碼實作了這個演算法:

/**
 * Shuffles an array in place.
 * @param {Array} a Array containing the elements to be shuffled.
 */
function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
}

ES6 版本

在ES6 中,可以使用解構賦值來簡化程式碼:

/**
 * Shuffles an array in place. ES6 version.
 * @param {Array} a Array containing the elements to be shuffled.
 */
function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
}

陣列原型實作

為了增強程式碼可讀性,您可以新增shuffle功能作為原型方法數組:

Object.defineProperty(Array.prototype, 'shuffle', {
    value: function() {
        for (let i = this.length - 1; i > 0; i--) {
            const j = Math.floor(Math.random() * (i + 1));
            [this[i], this[j]] = [this[j], this[i]];
        }
        return this;
    }
});

這允許您簡單地調用 arr.shuffle() 來隨機播放名為 arr 的數組。

用法範例

要使用 shuffle 函數,您可以提供一個元素數組作為輸入,例如:

let myArray = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
shuffle(myArray);

shuffle 函數會隨機重新排列myArray 中的元素。當您需要隨機資料或遊戲中洗牌的場景時,此功能特別有用。

以上是如何使用 Fisher-Yates 演算法在 JavaScript 中有效地打亂數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn