问题
随机排序一个数组
题解
这个方法短小快捷,但是容易出问题
[1, 2, 3, 4, 5].sort(() => 0.5 > Math.random());
数组中随机取一个 index,两者互换
function shuffle(array) {
for (let index = 0; index < array.length; index++) {
const element = array[index];
const randomIndex = Math.floor(Math.random() * array.length);
const randomElement = array[randomIndex];
array[randomIndex] = element;
array[index] = randomElement;
}
return array;
}
console.log(shuffle([1, 2, 3, 4, 5]));
网上找了一下,有优化版本的,叫 Fisher–Yates shuffle 洗牌算法,好像实现是差不多的
别问,问就是网上的算法才是最 NB 的
Array.prototype.shuffle = function () {
var array = this;
var m = array.length,
t,
i;
while (m) {
i = Math.floor(Math.random() * m--);
t = array[m];
array[m] = array[i];
array[i] = t;
}
return array;
};
后记
你知道数组的 sort
的实现原理吗?能手写一个吗?