2rever的前端小站

2rever的前端小站

跨界前端的自我修养

js快速排序
第二个工业级别的算法 快速排序有就地排序和占用空间的排序 暴力写法(经典写法) 但是这个写法空间占用太大,所以不用这个写法 可以通过快排找到数组中第K大的元素 找到前K大的元素 使用空间最少,速度最快 1234567891011121314151617181920212223function quickSort2(ary) { if (ary.length < 2) { return ary.slice() } var pivot = ary[Math.floor(Math.random() * ary.length)]//0到数组长度...
js选择排序
选择排序 速度较慢,速度为 O(n^2)123456789101112131415//不稳定 n*nfunction selectSort(ary) { var l = ary.length var minPos for(var i = 0; i < l - 1; i++) { minPos = i for(var j = i + 1; j < l; j++) { if (ary[j] < ary[minPos]) { minPos = j } } ...
js冒泡排序
冒泡排序 速度较慢,速度为 O(n^2) 1234567891011121314151617//冒泡排序//循环控制趟数,i是趟数-1function bubble(array){ for (var i = 0; i < array.length; i++) { //每一趟里面:要对比所有的数据进行交换,把大的值交换到后面的位置 for (var k = 0; k < array.length - i - 1; k++) { //进行判断大小然后交换两个数据 if (array[k]>array[k+1]) &...
js归并排序
归并排序 第一个工业级别的算法 归并排序没有办法就地排序12345678910111213141516171819202122function mergeSort(ary) { if (ary.length < 2) { return ary.slice() } var mid = Math.floor(ary.length / 2) var left = mergeSort(ary.slice(0, mid)) var right = mergeSort(ary.slice(mid)) var result = [] while(...
bind方法实现(不考虑this)
bind函数123456//bind的实现function bind(f,...fixedArgs){ return function(...args){ return f(...fixedArgs,...args) }} 123456789//bind原来的实现function bind(f) { var fixedArgs = Array.from(arguments).slice(1) return function() { var args = Array.from(arguments) va...
js柯里化curry函数实现
curry函数123456789101112131415161718192021222324252627282930313233343536373839404142function curry(f, l = f.length) { return function(...args1) { if (args1.length >= l) { return f(...args1) } else { return function(...args2) { if (args1.lengt...
js二叉树遍历方法

深度优先遍历

  • 二叉树前序遍历
1
2
3
4
5
6
7
8
//二叉树前序遍历
function preOrderTraverse(root,action = console.log){
if (root) {
action(root.val)
preOrderTraverse(root.left,action)
preOrderTraverse(root.right,action)
}
}
  • 二叉树后序遍历
1
2
3
4
5
6
7
8
//二叉树后序遍历
function postOrderTraverse(root,action = console.log){
if (root) {
postOrderTraverse(root.left,action)
postOrderTraverse(root.right,action)
action(root.val)
}
}
  • 二叉树中序遍历
1
2
3
4
5
6
7
8
//二叉树中序遍历
function midOrderTraverse(root,action = console.log){
if (root) {
midOrderTraverse(root.left,action)
action(root.val)
midOrderTraverse(root.right,action)
}
}

广度优先遍历

  • 广度优先遍历是从二叉树的第一层(根结点)开始,自上至下逐层遍历;在同一层中,按照从左到右的顺序对结点逐一访问。
    实现:
node.js自带promisify函数实现
123456789101112131415161718192021// 把基于回调的函数转为基于promisefunction promisify(f) { //返回一个函数收集参数 return function(...args) { return new Promise((res,rej) => { f(...args,(err,data) => { if(err){ rej(err) }else { res(data)...
二分查找的笔记
递归写法 1234567891011121314151617function binarySearch(data, dest, start, end){ var end = end || data.length - 1, start = start || 0, middle = Math.floor((start + end) / 2); // 递归完成条件 if(data[middle] == dest){ return middle; } // 条件判断进行不同的递归 if(dest &l...
react 虚拟DOM和diff算法的笔记
几种更改数据算法的区别123456789101112131415161718192021222324252627282930313233343536373839404142431. state 数据2. JSX 模板3. 数据 + 模板 结合,生成真实DOM,来显示4. state发生改变5. 数据 + 模板 结合,生成真实的DOM,替换原始DOM* 缺陷: 第一次生成了一个完整的DOM片段 第二次生成了一个完整的DOM片段 第二次的DOM替换第一次的DOM 直接操作DOM元素,消耗大量的性能============================1.state 数据2. JS...
2rever
建筑系 => 前端