一、排序
-
冒泡排序
// 冒泡排序 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 = 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; }
持续更新中~~~