一, 排序
冒泡排序
- // 冒泡排序
- 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;
- }
持续更新中~~~
来源: https://www.2cto.com/kf/201904/806163.html