频道栏目
首页 > 程序开发 > web前端 > HTML/CSS > 正文
Javascript之常见算法整理(持续更新)-柠檬味的前端-SegmentFault思否
2019-04-30 19:50:26           
收藏   我要投稿

一、排序

冒泡排序

//冒泡排序
function bubbleSort(arr) {
  for(var i = 1, len = arr.length; i < len - 1; ++i) {
    for(var j = 0; j <= len - i; ++j) {
      if (arr[j] > arr[j + 1]) {
        let temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
}

快速排序

//快速排序
function qSort(arr) {
  //声明并初始化左边的数组和右边的数组
  var left = [], right = [];
  //使用数组第一个元素作为基准值
  var base = arr[0];
  //当数组长度只有1或者为空时,直接返回数组,不需要排序
  if(arr.length <= 1) return arr;
  //进行遍历
  for(var i = 1, len = arr.length; i < len; i++) {
    if(arr[i] <= base) {
    //如果小于基准值,push到左边的数组
      left.push(arr[i]);
    } else {
    //如果大于基准值,push到右边的数组
      right.push(arr[i]);
    }
  }
  //递归并且合并数组元素
  return [...qSort(left), ...[base], ...qSort(right)];    //return qSort(left).concat([base], qSort(right));
}

二、字符串

回文字符串

//判断回文字符串
function palindrome(str) {
  var reg = /[\W\_]/g;
  var str0 = str.toLowerCase().replace(reg, "");
  var str1 = str0.split("").reverse().join("");
  return str0 === str1;
}

翻转字符串

function reverseString(str) {
  return str.split("").reverse().join("");
}

字符串中出现最多次数的字符

function findMaxDuplicateChar(str) {
  var cnt = {}, //用来记录所有的字符的出现频次
      c = ''; //用来记录最大频次的字符
  for (var i = 0; i < str.length; i++) {
    var ci = str[i];
    if (!cnt[ci]) {
      cnt[ci] = 1;
    } else {
      cnt[ci]++;
    }
    if (c == '' || cnt[ci] > cnt[c]) {
      c = ci;
    }
  }
  console.log(cnt)
  return c;
}

三、数组

数组去重

//数组去重
function uniqueArray(arr) {
  var temp = [];
  for (var i = 0; i < arr.length; i++) {
    if (temp.indexOf(arr[i]) == -1) {
      temp.push(arr[i]);
    }
  }
  return temp;
  //or
  return Array.from(new Set(arr));
}

四、查找

二分查找

//二分查找
function binary_search(arr, l, r, v) {
  if (l > r) {
    return -1;
  }
  var m = parseInt((l + r) / 2);
  if (arr[m] == v) {
    return m;
  } else if (arr[m] < v) {
    return binary_search(arr, m+1, r, v);
  } else {
    return binary_search(arr, l, m-1, v);
  }
}

五、搜索

深度优先搜索

//深搜 非递归实现
function deepTraversal(node) {
  var nodeList = [];
  if (node) {
    var stack = [];
    stack.push(node);
    while(stack.length != 0) {
      var childrenItem = stack.pop();
      nodeList.push(childrenItem);
      var childrenList = childrenItem.children;
      for (var i = childrenList.length-1; i >= 0; i--) {
        stack.push(childrenList[i]);
      }
    }
  }
  return nodeList;
}

广度优先搜索

//广搜
function wideTraversal(node) {
  var nodes = [];
  if (node != null) {
    var queue = [];
    queue.unshift(node);
    while (queue.length != 0) {
      var item = queue.shift();
      nodes.push(item);
      var children = item.children;
      for (var i = 0; i < children.length; i++)
        queue.push(children[i]);
    }
  }
  return nodes;
}

持续更新中~~~

点击复制链接 与好友分享!回本站首页
相关TAG标签
上一篇:前端开发中遇到的一些问题----持续更新-luweiweiwei-SegmentFault思否
下一篇:Sequelizejs关联-外籍杰克-SegmentFault思否
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑--致力于做实用的IT技术学习网站

注册送白菜38