一、排序算法
1. 冒泡排序:数字越大越往上
function bubbleSort(arr) {
let length = arr.length;
for (let i = 0; i < length; i++) {
for (let j = 0; j < length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
2. 选择排序
chooseSort(arr){
let len = arr.length;
for(let i=0;i<len-1;i++){
for(let j=i+1;j<len;j++){
if(arr[i]>arr[j]){
[arr[i], arr[j]] = [ arr[j], arr[i]]
}
}
}
return arr
}
3. 插入排序
insertSort(arr){
for(let i=1;i<arr.length;i++){
for(let j=i;j>0;j--){
if(arr[j]<arr[j-1]){
[arr[j],arr[j-1]] = [arr[j-1],arr[j]]
}
}
}
console.log(arr);
return arr
}
4. 快速排序
function quickSort(arr){
if(arr.length<=1){
return arr;
}
let left=[],right=[];
let current=arr.splice(0,1);
for(let i=0;i<arr.length;i++){
if(arr[i]<current){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat(current,quickSort(right))
}
let arr1=[5,7,1,6,2,3,9,4,8];
quickSort(arr1);
5. 归并排序
function MergeSort(array) {
let len = array.length;
if (len <= 1) {
return array;
}
let num = Math.floor(len / 2);
let left = MergeSort(array.slice(0, num));
let right = MergeSort(array.slice(num, array.length));
return merge(left, right);
function merge(left, right) {
let [l, r] = [0, 0];
let result = [];
while (l < left.length && r < right.length) {
if (left[l] < right[r]) {
result.push(left[l]);
l++;
} else {
result.push(right[r]);
r++;
}
}
result = result.concat(left.slice(l, left.length));
result = result.concat(right.slice(r, right.length));
return result;
}
}
二、列表转成树
[
{ id: 1, title: "chil1", parentId: 0 },
{ id: 2, title: "chil2", parentId: 0 },
{ id: 3, title: "chil1-1", parentId: 1 },
{ id: 4, title: "chil1-2", parentId: 1 },
{ id: 5, title: "chil2-1", parentId: 2 },
]
tree = [
{
"id": 1,
"title": "chil1",
"parentId": 0,
{
"id": 3,
"title": "chil1-1",
"parentId": 1,
},
{
"id": 4,
"title": "chil1-2",
"parentId": 1,
},
},
{
"id": 2,
"title": "chil2",
"parentId": 0,
{
"id": 5,
"title": "chil1-1",
"parentId": 2,
},
},
]
listToTree(arr){
let map = {}
let treeData = []
for(let i=0;i<arr.length;i++){
map[data[i].id] = data[i]
}
for(let i in map){
if(map[i].parentId){
if(!map[map[i].parentId].children){
map[map[i].parentId].children = []
} else {
map[map[i].parentId].children.push(map[i])
}
} else {
treeData.push(map[i])
}
}
}
三、深度优先遍历
四、广度优先遍历