如何让前端代码速度提高60倍( 二 )


完美 , 只用了86ms!小明激动的站了起来 , 还拍了下桌子 , 全然无视观众的眼光 。
小明已经满足的不要不要的了 , 对86ms相当满意 , 老板也对他刮目想看 。4.希尔排序
难道就没有提升的余地了么?进过调查研究表明 , 是有更优的方案的:
/** * 希尔排序 * 核心:通过动态定义的 gap 来排序 , 先排序距离较远的元素 , 再逐渐递进 * @param {*} arr* 耗时:15ms */function shellSort(arr) { const len = arr.length; let gap = Math.floor(len / 2);while (gap > 0) { // gap距离 for (let i = gap; i < len; i++) { const temp = arr[i]; let preIndex = i - gap;while (arr[preIndex] > temp) { arr[preIndex + gap] = arr[preIndex]; preIndex -= gap; } arr[preIndex + gap] = temp; } gap = Math.floor(gap / 2); }return arr; }复制代码耗时15ms , 膜拜 。####5.归并排序
/** * 归并排序 * @param {*} arr* 耗时 30ms */function concatSort(arr) { const len = arr.length; if (len < 2) { return arr; } const mid = Math.floor(len / 2); const left = arr.slice(0, mid); const right = arr.slice(mid); return concat(concatSort(left), concatSort(right));}function concat(left, right) { const result = []; while (left.length > 0 && right.length > 0) { result.push(left[0] <= right[0] ? left.shift() : right.shift()); } return result.concat(left, right);}复制代码耗时30ms , 也想当优秀 。还有没有更快的方法呢?答案是有的 , 但是会涉及到比较高僧的数学知识 , 放弃吧 , 孩子 。。。
 




推荐阅读