zoukankan      html  css  js  c++  java
  • 一些前端必备数据结构算法

    1.快排

    function quickSort(arr) {
      if(arr.length<=1) {
      return arr;
    }
    var s = Math.floor(arr.length/2);
    var temp = arr.splice(s,1);
    var left=[];
    var right=[];
    for(var i=0;i<arr.length;i++) {
      if(arr[i]<temp) {
        left.push(arr[i]);
      }
      if(arr[i]>=temp) {
        right.push(arr[i]);
      }
    }
    return quickSort(left).concat(temp,quickSort(right));
    }

    2.插入排序

    function insertSort(arr) {
      if (Array.isArray(arr)) {
        for (var i = 1; i < arr.length; i++) {
          var preIndex = i - 1;
          var current = arr[i]
          while (preIndex >= 0 && arr[preIndex] > c) {
            arr[preIndex + 1] = arr[preIndex];
            preIndex--;
          }
          arr[preIndex + 1] = current;
        }
        return arr;
      }
    }

    3.选择排序

    function selectSort(arr) {
      if (Array.isArray(arr)) {
        for (var i = 0; i < arr.length - 1; i++) {
          var minIdex = i;
          for (var j = i + 1; j < arr.length; j++) {
            minIdex = arr[j] < arr[minIdex] ? j : minIdex;
          }
          [arr[i], arr[minIdex]] = [arr[minIdex], arr[i]];
        }
        return arr;
      }
    }

    4.希尔排序

    function shellSort(arr) {
      var len = arr.length,temp,gap = 1;
      // 动态定义间隔序列,也可以手动定义,如 gap = 5;
      while (gap < len / 5) {
        gap = gap * 5 + 1;
      }
      for (gap; gap > 0; gap = Math.floor(gap / 5)) {
        for (var i = gap; i < len; i++) {
          temp = arr[i];
          for (var j = i - gap; j >= 0 && arr[j] > temp; j -= gap) {
            arr[j + gap] = arr[j];
          }
          arr[j + gap] = temp;
        }
      }
      return arr;
    }

    5.数组的扁平化:将多维数组变成一维数组

    方法一:递归一
    function parseArr(arr,res){
      var i=0;
      for(i=0;i<arr.length;i++){
        if(arr[i] instanceof Array){
          parseArr(arr[i],res);
        }else{
          res.push(arr[i]);
        }
      }
    }
    var a=[1,[2,[3,4]],5,6];
    var res=[];
    parseArr(a,res);
    递归二(推荐)
    var arr = ['mu','zi',['dig',['big','love']]]
    function flatten(arr){
      var res = [];
      for(var i=0;i<arr.length;i++){
        if(Array.isArray(arr[i])){
          res = res.concat(flatten(arr[i]));
        }else{
          res.push(arr[i]);
        }
      }
      return res;
    }
    console.log(flatten(arr))//["mu", "zi", "dig", "big", "love"]

    6.树的三种简单遍历

    先序遍历
    let result = [];
    let dfs = function (node) {
      if(node) {
        result.push(node.value);
        dfs(node.left);
        dfs(node.right);
      }
    }
    中序遍历
    let result = [];
    let dfs = function (node) {
      if(node) {
        dfs(node.left);
        result.push(node.value); // 直到该结点无左子树 将该结点存入结果数组 接下来并开始遍历右子树
        dfs(node.right);
      }
    }
    后序遍历
    result = [];
    function dfs(node) {
      if(node) {
        dfs(node.left);
        dfs(node.right);
        result.push(node.value);
      }
    }

  • 相关阅读:
    用Python计算最长公共子序列和最长公共子串
    两个有序数列,求中间值 Median of Two Sorted Arrays
    python判断平衡二叉树
    经验之谈:如何为你的机器学习问题选择合适的算法?
    跑道没了,它们还在跑:澳门赛狗业的遗孤
    钉钉:工作的归工作,生活的…也归工作?
    假·照骗,真·社交焦虑
    苹果市值破万亿,iPhone 会涨价吗?
    写日志(log)
    多维数组排序
  • 原文地址:https://www.cnblogs.com/atao24/p/13775677.html
Copyright © 2011-2022 走看看