乐趣区

Javascript之常见算法整理持续更新

一、排序

  1. 冒泡排序

    // 冒泡排序
    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;
          }
        }
      }
    }
  2. 快速排序

    // 快速排序
    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));
    }

二、字符串

  1. 回文字符串

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

    function reverseString(str) {return str.split("").reverse().join("");
    }
  3. 字符串中出现最多次数的字符

    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 = ci;}
      }
      console.log(cnt)
      return c;
    }

三、数组

  1. 数组去重

    // 数组去重
    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));
    }

四、查找

  1. 二分查找

    // 二分查找
    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);
      }
    }

五、搜索

  1. 深度优先搜索

    // 深搜 非递归实现
    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;
    }
  2. 广度优先搜索

    // 广搜
    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;
    }

持续更新中~~~

退出移动版