国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

數組隨機排序:洗牌算法(Fisher–Yates shuffle)

張金寶 / 723人閱讀

摘要:代碼實現代碼一測試用例輸出其中,代碼二測試用例輸出其中,參考資料洗牌算法學習筆記數組隨機排序洗牌算法給數組隨機排序洗牌算法原理

原理及步驟

1.定義一個數組(shuffled),長度(length)是原數組(arr)長度
2.取 0 到 index (初始0) 隨機值 rand, shuffled[index] = shuffled[rand], shuffled[rand] = arr[index]
3.index++ ; 重復第二步,直到 index = length -1
簡單來說,就是 shuffled 從 0 到 length-1 的賦值過程,并且新加入的值是 arr[index]。

代碼實現 1.代碼一
function random(min, max) {
    if (max == null) {
        max = min;
        min = 0;
    }
    return min + Math.floor(Math.random() * (max - min + 1));
};
function shuffle(arr) {
    var length = arr.length, shuffled = Array(length);
    for (var index = 0, rand; index < length; index++) {
        rand = random(0, index);
        if (rand !== index) shuffled[index] = shuffled[rand];
        shuffled[rand] = arr[index];
    }
    return shuffled;
}

測試用例:

var arr = ["dfewfew", 2, 3, 4, 5, 6, 7, "fdf"", { kdofkod, jiji, miojim }];
shuffle(arr);

console輸出:

[3, "dfewfew", 7, 2, 4, Array(3), "fdf"", 5, 6]

其中, Array(3):length:3
0:"kdofkod"
1:"jiji"
2:"miojim"

2.代碼二
function shuffle(arr) {
    var i, j, temp;
    for (i = arr.length - 1; i > 0; i--) {
        j = Math.floor(Math.random() * (i + 1));
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    return arr;
};

測試用例:

var arr = ["dfewfew", 2, 3, 4, 5, 6, 7, "fdf"", { kdofkod, jiji, miojim }];
shuffle(arr);

console輸出:

[7, 3, "dfewfew", "fdf"", Array(3), 4, 6, 2, 5]

其中, Array(3):length:3
0:"kdofkod"
1:"jiji"
2:"miojim"

參考資料

Fisher–Yates shuffle 洗牌算法
JavaScript學習筆記:數組隨機排序
洗牌算法:給數組隨機排序
洗牌算法Fisher_Yates原理

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82264.html

相關文章

  • 也談前端面試常見問題之『數組亂序』

    摘要:看完部分的源碼,首先迫不及待想跟大家分享的正是本文主題數組亂序。這是一道經典的前端面試題,給你一個數組,將其打亂,返回新的數組,即為數組亂序,也稱為洗牌問題。關于數組亂序,正確的解法應該是,復雜度。 前言 終于可以開始 Collection Functions 部分了。 可能有的童鞋是第一次看樓主的系列文章,這里再做下簡單的介紹。樓主在閱讀 underscore.js 源碼的時候,學到...

    tracy 評論0 收藏0
  • Underscore 源碼(三)隨機洗牌算法

    摘要:隨機洗牌算法說實話,以前理解數組的排序,都是將數組按照一定的邏輯由大到小或者由小到大排序,我自己是沒有碰到過隨機打亂數組排序的問題。然后里用的是所謂的洗牌算法,很高效??偨Y又是三個知識點,分別是隨機洗牌分組和函數的實現,沒什么復雜的。 這是第三篇關于 Underscore 的源碼解讀,最近一段時間學的東西很少,自己太忙了,一方面忙著找實習,晚上回去還要寫畢業論文。畢業論文真的很憂傷,因...

    silencezwm 評論0 收藏0
  • 洗牌算法

    摘要:描述拷貝數組從掃描數組,選擇一個隨機數新數組的新數組的新數組的原始數組重復第步,直到末尾最終的新數組就是隨機的參考三種洗牌算法 洗牌算法 Fisher-Yates Shuffle Fisher–Yates 隨機置亂算法,通俗說就是生成一個有限集合的隨機排列。 描述: 寫下從 1 到 N 的數字 取一個從 1 到剩下的數字(包括這個數字)的隨機數 k 從低位開始,得到第 k 個還沒有被...

    omgdog 評論0 收藏0
  • JavaScript30秒, 從入門到放棄之Array(五)

    摘要:原文地址秒,從入門到放棄之五博客地址秒,從入門到放棄之五水平有限,歡迎批評指正從給定的數組中隨機選出指定個數的數組元素。否則判斷數組元素是否大于或者等于指定元素,尋找過程與前邊類似。 原文地址:JavaScript30秒, 從入門到放棄之Array(五)博客地址:JavaScript30秒, 從入門到放棄之Array(五) 水平有限,歡迎批評指正 sampleSize Gets n...

    dunizb 評論0 收藏0
  • JavaScript專題之亂序

    摘要:源碼地址為了簡化篇幅,我們對這個數組進行分析,數組長度為,此時采用的是插入排序。插入排序的源碼是其原理在于將第一個元素視為有序序列,遍歷數組,將之后的元素依次插入這個構建的有序序列中。 JavaScript 專題系列第十九篇,講解數組亂序,重點探究 Math.random() 為什么不能真正的亂序? 亂序 亂序的意思就是將數組打亂。 嗯,沒有了,直接看代碼吧。 Math.random ...

    I_Am 評論0 收藏0

發表評論

0條評論

張金寶

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<