1
2
3
4
5
6
7
8
9
10
11
12
13
// 冒泡
function sort1(arr){
for ( let i=0, len=arr.length; i<len-1; i++ ){
for ( let j=i+1; j<=len-1; j++ ){
if ( arr[i] > arr[j] ){
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
return arr;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 插入
function sort2(arr){
for ( let i=1, len=arr.length; i<=len-1; i++ ){
var tmp = arr[i];
for ( var j=i-1; j>=0; j-- ){
if ( arr[j] > tmp ){
arr[j+1] = arr[j];
}
else {
break ;
}
}
arr[j+1] = tmp;
}
return arr;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 快排
function part(arr, start, end){
let pivot = arr[start];
while (start < end) {
while (start < end && arr[end] > pivot) {
--end;
}
arr[start] = arr[end];
while (start < end && arr[start] <= pivot) {
++start;
}
arr[end] = arr[start];
}
arr[start] = pivot;
return start;
}

function sort3(arr, start, end){
if ( start >= end ) return arr;
let index = part(arr, start, end);
sort3(arr, start, index-1);
sort3(arr, index+1, end)
return arr;
}
function sort(arr){
return sort3(arr,0,arr.length-1)
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const tree = {
value : 1,
children: [
{value:'1-1', children:[{value:'1-1-1',children:[]}]},
{value:'1-2', children:[{value:'1-2-1', children:[{value:'1-2-1-1'}]},{value:'1-2-2',children:[]}]},
{value:'1-3', children:[{value:'1-3-1'},{value:'1-3-2'}]}
]
}

// 广度优先
function spread(tree){
var nodeArr = [];
var valArr = [];

nodeArr.push(tree);
while ( nodeArr.length > 0 ){
let node = nodeArr.shift();
valArr.push(node.value);
node.children && node.children.map(v=>{
nodeArr.push(v);
});
}
return valArr;
}

// 深度优先
function deep(tree){
let nodeArr = [], valArr = [];
nodeArr.push(tree);
while ( nodeArr.length > 0 ){
let node = nodeArr.shift();
valArr.push(node.value);
if ( node.children ){
for ( let len=node.children.length-1; len>=0 ;len-- ){
nodeArr.unshift(node.children[len]);
}
}
}
return valArr;
}