最近在学习数据结构和算法,遇到一个小实战分享一下
- 创建1-100万整数的数组
- 写一个算法将他们打乱
代码实现:
/**
* 生成被打乱的有100万个数字的数组
* @params w多少万
*/
const initData = (w) => {
const arr = []
for (let i = 0; i < w * 10000; i++) {
arr[i] = i + 1
}
// shuffle_simple(arr)
shuffle(arr)
// fisher_yates_shuffle(arr)
return arr
}
// 简单排序方法
const shuffle_simple = (arr) => {
return arr.sort(() => Math.random() - .5)
}
// 排序,拉大随机数
const shuffle = (arr) => {
const m = []
const N = arr.length * arr.length * arr.length
for (let i = 0; i < arr.length - 1; i++) {
m[i] = Math.floor(Math.random() * N)
}
return arr.sort((x, y) => m[x] - m[y])
}
// O(n)打乱算法
const fisher_yates_shuffle = (arr) => {
for(let i = 0; i < arr.length - 1; i++) {
const j = i + Math.floor(Math.random() * (arr.length - i))
[arr[i], arr[j]] = [arr[j], arr[i]]
}
}
// 计算时间
console.time('A')
const arr = initData(100)
console.timeEnd('A')