# 算法

# 优先级

  • 广度优先
  • 深度优先

# 排序

# n^2算法

父子重复遍历

# nlogn算法

Merge Sort归并排序法

将数组拆分成单个后进行两两排序,接着四四排序,接着八八排序,逐步合并到整体合并

const left = [1,3,5,7];
const right = [2,4,6,8];
let arr = new Array(8);
let cur = 0;
let i = 0;
let j = 0;
for(let cur = 0; cur < arr.length ; cur ++){
    if(left[i]<right[j]){
        arr[cur] = left[i];
        i++;
    }else{
        arr[cur] = right[j];
        j++;
    }
};
console.log(arr);

# faster算法

暂无

# 二叉树

一个只有左右值和当前值的树

难点:做个添加、搜索、移除节点

node = {
    left: '',
    key: '',
    right: ''
}

# 邻接矩阵

二维数组中的二进制矩阵

规律是:相邻俩成员值为1

[
    [1,2,3,4,5],
    [6,7,8,9,0]
]

# 邻接表

二维数组中,只有俩列

[
    1: [2,3,4,5],
    6: [7,8,9,0]
]

# 关联矩阵

当俩点有关时,值为1,否则为0

[
    [1,0,0,1,0]
    [0,1,0,0,0]
    [0,0,1,1,0]
    [1,0,1,0,0]
    [0,0,0,0,0]
]

# 小技巧

# 当为某值时取0

当index为4时,index=0

index%=4;

# 当"||"右值不为0

当index为0时,index=0

index = x || 10;
index = x === 0 ? 0 : x || 10;

# 生成[rangeL,rangeR]间随机数

let n = (rangeR-rangeL)*Math.random()+rangeL

# 随机数组排序

let arr,newArr,i,temp;
arr = [1,8,3,6,8,0,9,8,7,2,9,5,4,6,5];
newArr = [];
arr.forEach(o=>{
	if(!newArr.length) return newArr.push(o);
	temp = '';
	i = 0;
	newArr.forEach(k=>{
		i++;
		if(o>k) {
			temp = i-1;
        }
		if(i == newArr.length){
			if(temp === '') {
				newArr.unshift(o);
			}else {
				newArr.splice(temp+1,0,o);
			}
		}
	})
});

# 获取最左值

// node = {
//     left: '',
//     key: '',
//     right: ''
// }
while(node && node.left !== null) {
    node = node.left
}
return node.key
Last Updated: 4/17/2025, 11:55:44 AM