归并排序与快速排序这两个算法放在一起,也是因为时间复杂度都是对数级别的。
目前看过的资料,归并排序看《学习JavaScript数据结构与算法》介绍的归并排序吧,快速排序直接看百度百科,讲的不错。通过这两份资料弄明白实现原理之后,最后看《学习JavaScript数据结构与算法》一书里的JS实现代码。
和之前的一样,嗯,《学习JavaScript数据结构与算法》这本书里都有现成ES5代码,就不在这儿写了,关键是弄清楚原理,然后JS代码每天写两遍,就OK了。ES6的代码周五之前补上。
目前着急把数据结构与算法给攻下了,这块知识占用了很长时间了,计划12月25号完成。春节前把JS设计模式搞定,成为一名合格的中级前端工程师。
归并排序:
var array = [7, 3, 9, 6, 11, 2, 4, 5]; var merge = (left, right) => { var result = [], il = 0, ir = 0; while (il < left.length && ir < right.length) { if (left[il] < right[ir]) { result.push(left[il++]); } else { result.push(right[ir++]); } } while (il < left.length) { result.push(left[il++]); } while (ir < right.length) { result.push(right[ir++]); } return result; }; var mergeSortRec = arr => { var length = arr.length; if (length === 1) { return arr; } var mid = Math.floor(length/2), left = arr.slice(0, mid), right = arr.slice(mid, length); return merge(mergeSortRec(left), mergeSortRec(right)); } var newArray = mergeSortRec(array); console.log(newArray);
算法和验证过程都给出了,其实还是挺复杂的。