算法学习3 递归

114 阅读1分钟

1、数组排序 快排 递归

var sortArray = function(nums){
    // 递归后 中止条件
    if(nums.length<=1){
        return nums
    }
    // 取出第一项 也可以时其他项
    let cur =nums[0];
    let left=[];
    let right =[];
    // 循环剩下的项 和第一项比价 小的放left 大的放right
    for(let i=1;i<nums.length;i++){
        if(nums[i]>=cur){
            right.push(nums[i])
        }else{
            left.push(nums[i])
        }
    }
    // 递归排列left和right 知道每一项都只有一个元素 连接数组
    return sortArray(left).concat([cur]).concat(sortArray(right))

}                    

2、合并两个有序链表

var mergeTwoLists = function(l1, l2) {
	//边界条件
    if(l1==null&&l2==null){
        return null
    }
    if(l1==null){
        return l2
    }
    if(l2==null){
        return l1
    }
    //确保l1、l2都不为空
    if(l1.val>l2.val){
        l2.next=mergeTwoLists(l1,l2.next);
        return l2;
    }else{
        l1.next=mergeTwoLists(l1.next,l2);
        return l1;
    }
};