import shuffleInPlace from "./shuffle_in_place.js";
/**
* [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) 是一种快速生成有限集合随机排列的方法。
* 这是一个围绕 `shuffle_in_place` 的函数,保证不会修改输入。
*
* @param {Array} x 包含0个或多个数字的样本
* @param {Function} [randomSource=Math.random] 一个可选的熵源,返回范围在 [0, 1) 之间的数字
* @return {Array} 输入数组的随机排列版本
* @example
* var shuffled = shuffle([1, 2, 3, 4]);
* shuffled; // = [2, 3, 1, 4] 或其他随机排列
*/
function shuffle(x, randomSource) {
// 对原数组进行切片,以避免修改原数组
const sample = x.slice();
// 然后对浅拷贝的数组进行原地洗牌
return shuffleInPlace(sample, randomSource);
}
export default shuffle;