各种排序的学习

准备

作为计算时间的工具,本来打算用mocha,但是还不太会用,于是就手撸了一个很low的test函数。

function test(fn,arrNum,circleTimes,arr) {
    var avgTime = [];
    var testArr = [];
    for(let i = 0; i < arrNum; i++) {
        testArr.push(Math.random() * 100)
    }
    arr = arr || testArr;
    for(let i=0;i<circleTimes;i++) {
        var start = new Date().getTime();
        fn(arr);
        var end = new Date().getTime();
        avgTime.push(end - start)        
    }
    console.log(avgTime.reduce(function(a,b){a+=b;return a},0)/avgTime.length)
}

同时,也借着这个机会用了用webworker,js的单线程阻塞真不是好玩的。
使用webworker有一点需要注意,它必须在服务端上才能使用。

var ww = new Worker("http://worker.js");
var asc = new Promise((resolve, reject) => {
   ww.onmessage = function(e) {
      console.log(e.data);
      resolve("该关闭webworker啦");
   }
})
asc.then((msg) => {
   ww.terminate();
   console.log("webpack已关闭");
})

快速排序

function fast(arr) {
if (arr.length <= 1) {
return arr
}
var stad = Math.floor((arr.length - 1) / 2);
var stadEl = arr.splice(stad, 1)[0];
var l = [];
var r = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < stadEl) {
l.push(arr[i])
} else {
r.push(arr[i])
}
}
return fast(l).concat(stadEl).concat(fast(r))
}
“`
这里遇到了一个问题,用数组和数字进行比较会极大的损耗性能。之前也完全不知道数组是可以和数字进行比较的。为了了解这个原理,特地在stackoverflow上问了,等待回答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值