实现生成100W条数据并随机排序

360 阅读1分钟

最近在学习数据结构和算法,遇到一个小实战分享一下

  1. 创建1-100万整数的数组
  2. 写一个算法将他们打乱

代码实现:

/**
 *   生成被打乱的有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')