前端算法收集库

Posted hjptopshow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端算法收集库相关的知识,希望对你有一定的参考价值。

1. 前言
前端算法代码收集库

旨在帮助大家提高javascript编码水平,代码规范,面对面试官问最难的算法问题也能从容应对

这是一个常见的js算法面试题收集库,包含测试,欢迎star,如果库中没有的算法,欢迎提issue或者PR,补全。
提到算法,这里就要说下时间复杂度。
时间复杂度:算法的时间复杂度是一个函数,描述了算法的运行时间。时间复杂度越低,效率越高。
2. 关于代码规范
俗话说,无规矩不成方圆,所以平时一定要养成良好的编码习惯

Code Guide
在js开发前需要的东西(规范)

3. 关于代码测试
学习测试和持续集成(Continuous Integration,简称CI,意思是,在一个项目中,任何人对代码库的任何改动,都会触发CI服务器自动对项目进行构建,自动运行测试,甚至自动部署到测试环境。这样做的好处就是,随时发现问题,随时修复。因为修复问题的成本随着时间的推移而增长,越早发现,修复成本越低)。

javascript CI篇
测试框架 Mocha 实例教程
karma 测试框架的前世今生

4. 常见算法
4.1 二分查找
算法介绍
二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤:
(1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。
(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。
(3)如果某一步数组为空,则表示找不到目标元素。
参考代码:
非递归算法
function binary_search(arr,key)
  var low=0,
  high=arr.length-1;
  while(low<=high)
     var mid=parseInt((high+low)/2);
     if(key==arr[mid])
        return mid;
     else if(key>arr[mid])
        low=mid+1;
     else if(key<arr[mid])
        high=mid-1;
    else
      return -1;
    
  
;
var arr=[1,2,3,4,5,6,7,8,9,10,11,23,44,86];
var result=binary_search(arr,10);
alert(result); // 9 返回目标元素的索引值
复制代码递归算法
function binary_search(arr,low,high,key)
  if(low>high)
    return -1;   
  
  var mid=parseInt((high+low)/2);
  if(arr[mid]==key)
    return mid;
  else if(arr[mid]>key)
    high=mid-1;
    return binary_search(arr,low,high,key);
  else if(arr[mid]<key)
    low=mid+1;
    return binary_search(arr,low,high,key);
  
;
var arr=[1,2,3,4,5,6,7,8,9,10,11,23,44,86];
var result=binary_search(arr,0,13,10);
alert(result); // 9 返回目标元素的索引值
复制代码4.2 排序
4.2.1 冒泡排序
算法介绍
解析:

比较相邻的两个元素,如果前一个比后一个大,则交换位置。
第一轮的时候最后一个元素应该是最大的一个。
按照步骤一的方法进行相邻两个元素的比较,这个时候由于最后一个元素已经是最大的了,所以最后一个元素不用比较。

js代码实现
function bubble_sort(arr)
  for(var i=0;i<arr.length-1;i++)
    for(var j=0;j<arr.length-i-1;j++)
      if(arr[j]>arr[j+1])
        var swap=arr[j];
        arr[j]=arr[j+1];
        arr[j+1]=swap;
      
    
  


var arr=[3,1,5,7,2,4,9,6,10,8];
bubble_sort(arr);
console.log(arr);
复制代码4.2.2快速排序
js代码实现
解析:快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实行快速排序。
function quick_sort(arr)
  if(arr.length<=1)
    return arr;
  
  var pivotIndex=Math.floor(arr.length/2);
  var pivot=arr.splice(pivotIndex,1)[0];

  var left=[];
  var right=[];
  for(var i=0;i<arr.length;i++)
    if(arr[i]<pivot)
      left.push(arr[i]);
    else
      right.push(arr[i]);
    
  

  return quick_sort(left).concat([pivot],quick_sort(right));


var arr=[5,6,2,1,3,8,7,1,2,3,4,7];
console.log(quick_sort(arr));
复制代码4.2.3 插入排序
算法介绍
解析:

从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到下一位置中
重复步骤2

js代码实现
function insert_sort(arr)
  var i=1,
  j,key,len=arr.length;
  for(;i<len;i++)
    var j=i;
    var key=arr[j];
    while(--j>-1)
      if(arr[j]>key)
        arr[j+1]=arr[j];
      else
        break;
      
    

    arr[j+1]=key;
  

  return arr;


insert_sort([2,34,54,2,5,1,7]);

作者:极客教程
链接:https://juejin.im/post/5aa4cd1051882577b45ea2c3
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

以上是关于前端算法收集库的主要内容,如果未能解决你的问题,请参考以下文章

前端也要懂机器学习(下)

前端应该掌握的一些技能

前端AES加解密

前端常用框架知识点收集

前端书籍集合

前端书籍集合