几种常见的排序和遍历

前几天怀着自信满满地状态去面试了一波有赞,不出所料被无情摧残。
所以,为了日后好相见,我决定好好的研究一波二叉树遍历还有几种常见排序。

直接上代码:

快速排序的实现

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

今天先这么多,后续再补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值