前几天怀着自信满满地状态去面试了一波有赞,不出所料被无情摧残。
所以,为了日后好相见,我决定好好的研究一波二叉树遍历还有几种常见排序。
直接上代码:
快速排序的实现
var a = '快速排序';
var quickssort = function(arr){
if(arr.length<=1){
return arr;
}
var index = Math.floor(arr.length/2);
var mid = arr.splice(index,1)[0];
var left = [];
var right = [];
for(var i = 0;i<arr.length;i++){
if(arr[i]<mid){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickssort(left).concat([mid],quickssort(right));
}
var arr =[234,46,2,54,1,24,6,3];
console.log(quickssort(arr));
冒泡排序
var b = '冒泡排序';
var arr1 =[234,46,2,54,1,24,6,3];
var maopao = function(arr){
var temp = 0;
for(var i = 0;i<arr.length;i++){
for(var j =0 ;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp ;
}
}
}
return arr;
}
console.log(maopao(arr1));
二叉树的广度优先排序
var c = '二叉树广度';
var tree = {
value:'a',
left:{
value:'b',
left:{
value:'d',
left:null,
right:null,
},
right:{
value:'e',
left:null,
right:null
}
},
right:{
value:'c',
left:null,
right:{
value:'f',
left:null,
right:null
}
}
}
var widetree = function(tree){
if(tree.length<=1){
return tree;
}
var a = [];
a.push(tree);
while(a.length!=0){
var node = a.shift();
console.log(node.value);
if(node.left!=null)a.push(node.left);
if(node.right!=null)a.push(node.right);
}
}
widetree(tree);
二叉树的先序排序
var d ='先序';
var pre = function(tree){
console.log(tree.value);
if(tree.left!=null)pre(tree.left);
if(tree.right!=null)pre(tree.right);
}
pre(tree);
今天先这么多,后续再补充