打亂一個有序數(shù)組

sort方法

let arr = [1,2,3,4,5,6,7,8,9,10];
arr.sort(()=>{
    return 0.5-Math.random();
})

Fisher–Yates shuffle洗牌算法

首先我們有一個已經(jīng)排好序的數(shù)組

1 2 3 4 5 6 7 8 9

1.從數(shù)組末尾開始,選區(qū)最后一個元素

1 2 3 4 5 6 7 8 【9】

在數(shù)組一共 9 個位置中坪蚁,隨機(jī)產(chǎn)生一個位置奔穿,該位置元素與最后一個元素進(jìn)行交換,如下:
隨機(jī)產(chǎn)生的位置為【2】敏晤,即arr[2]

1 2 [3] 4 5 6 7 8 【9】

交換位置:

1 2 [9] 4 5 6 7 8 【3】

2.接下來從數(shù)組倒數(shù)第二個元素開始進(jìn)行上述操作:

現(xiàn)在數(shù)組如下括號內(nèi)代表已隨機(jī)后的元素:

1 2 9 4 5 6 7 【8】 (3)

在數(shù)組除去最后一元素的8 個位置中贱田,隨機(jī)產(chǎn)生一個位置,該位置元素與最后一個元素進(jìn)行交換嘴脾,如下:
隨機(jī)產(chǎn)生的位置為【5】男摧,即arr[5]

1 2 9 4 5 [6] 7 【8】 (3)

交換位置:

1 2 9 4 5 [8] 7 【6】 (3)

3.其實可以看到只要重復(fù)第一步操作,既可以將數(shù)組亂序排列

現(xiàn)在數(shù)組如下:

1 2 9 4 5 8 7 (6 3)

代碼是實現(xiàn)

function shuffle(arr) {
  let length = arr.length,
    randomIndex,
    temp;
  while (length) {
    randomIndex = Math.floor(Math.random() * length--);
    temp = arr[length];
    arr[length] = arr[randomIndex];
    arr[randomIndex] = temp;
  }
  return arr;
}

let arr = [1, 2, 3, 4, 5, 6, 7, 8];
console.log(shuffle(arr));

使用正向for循環(huán)

function shuffleFor(arr) {
  let length = arr.length,
    randomIndex,
    temp;
  for (var i = 0; i < length; i++) {
    randomIndex = Math.round(Math.random() * (length - 1 - i)) + i;
    temp = arr[i];
    arr[i] = arr[randomIndex];
    arr[randomIndex] = temp;
  }
  return arr;
}
let arr1 = [1, 2, 3, 4, 5, 6, 7, 8];
console.log(shuffleFor(arr1));

代碼可優(yōu)化:

temp = arr[length];
arr[length] = arr[randomIndex];
arr[randomIndex] = temp;
//可以這樣寫
[arr[randomIndex],arr[length]]=[arr[length],arr[randomIndex]]

優(yōu)化后

function shuffleSimple(arr) {
  for (var i = 0; i < arr.length; i++) {
    const randomIndex = Math.round(Math.random() * (arr.length - 1 - i)) + i;
    [arr[i], arr[randomIndex]] = [arr[randomIndex], arr[i]];
  }
  return arr;
}
let arr2 = [1, 2, 3, 4, 5, 6, 7, 8];
console.log(shuffleSimple(arr2));
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末译打,一起剝皮案震驚了整個濱河市耗拓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奏司,老刑警劉巖乔询,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異韵洋,居然都是意外死亡竿刁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門搪缨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來食拜,“玉大人,你說我怎么就攤上這事勉吻〖嗌簦” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵齿桃,是天一觀的道長惑惶。 經(jīng)常有香客問我,道長短纵,這世上最難降的妖魔是什么带污? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮香到,結(jié)果婚禮上鱼冀,老公的妹妹穿的比我還像新娘报破。我一直安慰自己,他們只是感情好千绪,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布充易。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篱昔,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機(jī)與錄音稿静,去河邊找鬼。 笑死辕狰,一個胖子當(dāng)著我的面吹牛改备,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔓倍,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼悬钳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了柬脸?” 一聲冷哼從身側(cè)響起他去,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倒堕,沒想到半個月后灾测,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡垦巴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年媳搪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骤宣。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡秦爆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出憔披,到底是詐尸還是另有隱情等限,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布芬膝,位于F島的核電站望门,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锰霜。R本人自食惡果不足惜筹误,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望癣缅。 院中可真熱鬧厨剪,春花似錦哄酝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钾唬,卻和暖如春万哪,著一層夾襖步出監(jiān)牢的瞬間侠驯,已是汗流浹背抡秆。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留吟策,地道東北人儒士。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像檩坚,于是被迫代替她去往敵國和親着撩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.用js實現(xiàn)隨機(jī)選取10~100之間的10個數(shù)字匾委,存入一個數(shù)組拖叙,并排序 //要是獲取不重復(fù)的,則對隨機(jī)數(shù)...
    persistlu閱讀 5,584評論 0 0
  • 第四天 數(shù)組【悟空教程】 第04天 Java基礎(chǔ) 第1章數(shù)組 1.1數(shù)組概念 軟件的基本功能是處理數(shù)據(jù)赂乐,而在處理數(shù)...
    Java幫幫閱讀 1,603評論 0 9
  • 一薯鳍、數(shù)組定義 array() 1、索引數(shù)組 在一個變量中挨措,存儲一個或多個值挖滤。數(shù)組中的每一個元素都有一個訪問ID,根...
    竹與豆閱讀 532評論 0 0
  • 那么遠(yuǎn)有那么近的距離浅役,我始終跨不過去斩松。因為膽怯,害怕失去觉既,害怕一切只是我的想像惧盹。也許默默地在你后面,我才更安心瞪讼,至...
    因為一個人閱讀 152評論 0 0
  • 午睡悠然酣夢醒钧椰,東風(fēng)漸弱日西垂。 蕭蕭曠野無人跡尝艘,莽莽重岡少翠微演侯。 阡陌縱橫花鵲俏,蘆荻低墜雉雞肥背亥。 一年最是寒梅...
    不惑而歌閱讀 831評論 30 44