JS洗牌演算法的三種實現

2021-10-06 02:12:59 字數 1027 閱讀 9324

function

washcard1

(cards)

return cards

}

function

washcard2

(cards)

cards = cardstmp

return cards

}

function

washcard3

(cards)

)return cards

}

var cards =

newarray(54

+1).

join

('0').

split(''

).map(

(item, i)

=> i+1)

console.

log(

washcard1

(cards)

)console.

log(

washcard1([

1,2,

3]))

console.

log(

washcard2

(cards)

)console.

log(

washcard2([

1,2,

3]))

console.

log(

washcard3

(cards)

)console.

log(

washcard3([

1,2,

3]))

多次測試後可以發現 washcard1 並不能完全隨機洗牌,washcard1([1,2,3])並不能把 3 洗到最後。因為每次都會和後面的交換,3一旦被交換到前面就交換不回來了。

測試發現washcard2 才是完全隨機的洗牌演算法。washcard3並不完全隨機,這個就不造為什麼了,可能需要一些概率論的知識做解答。

三種洗牌演算法shuffle

由抽牌 換牌和插牌衍生出三種洗牌演算法,其中抽牌和換牌分別對應fisher yates shuffle和knuth durstenfeld shhuffle演算法。最早提出這個洗牌方法的是 ronald a.fisher 和 frank yates,即 fisher yates shuffle,其基...

三種經典的洗牌演算法

主要有3中經典的洗牌演算法 1.抽牌 1.初始化原始陣列和新陣列,原始陣列長度為n 已知 2.從還沒處理的陣列 假如還剩k個 中,隨機產生乙個 0,k 之間的數字p 假設陣列從0開始 3.從剩下的k個數中把第p個數取出 4.重複步驟2和3直到數字全部取完 5.從步驟3取出的數字序列便是乙個打亂了的數...

使用JS實現三種基本的排序演算法以及三種演算法的比較

function bubblesort arr if arr.length 0 arr.length 1 for let outer arr.length outer 2 outer return arr 選擇排序我們也需要用到巢狀迴圈,演算法思路如下 從陣列的第乙個元素開始,將第乙個元素逐個與其他...