完美 , 只用了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 , 也想当优秀 。还有没有更快的方法呢?答案是有的 , 但是会涉及到比较高僧的数学知识 , 放弃吧 , 孩子 。。。
推荐阅读
- JavaScript 表单验证如何实现的?
- 传真机怎么接收传真 如何使用传真机
- 中国专家谈如何防御“国家级网络攻击”
- 懂这10道JS经典算法题,你就是前端大神
- Win10太占空间?一秒钟工夫让硬盘增容10GB
- 剖析5大自媒体平台,让你清楚知道自媒体变现技巧!
- 淘宝补单怎么补,多少合适? 淘宝如何正确补单
- 如何将KPI指标拆解为具体的工作任务?
- 冰柠檬红茶如何做 冰柠檬红茶的制作方法
- 坦洋工夫红茶如何储存 三大存储方法介绍