各种排序的学习

来源:互联网 发布:mysql 忘了密码 编辑:程序博客网 时间:2024/06/06 19:54

准备

作为计算时间的工具,本来打算用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
原创粉丝点击