2rever的前端小站

2rever的前端小站

跨界前端的自我修养

健身计划
胸部 动作 数量 注意事项 上斜板杠铃卧推 5x10 平板杠铃卧推 5x10 上斜板哑铃卧推 4x10 龙门架十字夹胸 5x12 器械夹胸 5x12 哑铃飞鸟 4x12 背部 动作 数量 注意事项 高位下拉 6x10 坐姿划船 6x10 直臂下压 6x12 哑铃划船 5x12 杠铃划船 5x10 可选项,会做就做 肩膀 动作 数量 注意事项 坐姿哑铃推举 5x10 鹿家哑铃飞鸟(平举) 8x15 哑铃后束飞鸟 6x15 哑铃前平举 5x15 胳膊 动作 数量 注意事项...
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...
2rever
建筑系 => 前端