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);
}
}