算法(排序递归)

108 阅读1分钟

写一个 min 函数,要求 min(numbers) 能返回数组 numbers 中的最小数字

let min=(numbers)=>{ 
    if(numbers.length>2){
    return min([numbers[0],min(numbers.slice(1))])
    }else{
    return Math.min.apply(null,numbers)}
}

写出一个 sort 函数,要求 sort(numbers) 能返回一个把 numbers 从小到大排列的数组

let min = (numbers) =>{
    if(numbers.length > 2){
        return min([numbers[0], min(numbers.slice(1))])
    }else{
        return Math.min.apply(null, numbers)
    }    
}

let minIndex = (numbers) => numbers.indexOf(min(numbers))//找到数组中最小值的下标

let sort = (numbers) => {
    if(numbers.length > 2){
        let index = minIndex(numbers)
        let min = numbers[index]//最小值赋给min
        numbers.splice(index, 1)//删除最小值,留下剩下的参数
        return [min].concat(sort(numbers))
    }else{
        return numbers[0]>numbers[1]? numbers.reverse(): numbers
    }
}

数组中的slice,apply,splice

  • arr1.slice(1)//从第二个元素开始截取,可以获取一个新的数组
  • arr.splice(index,1)//删除index的一个元素
  • arr.splice(index,1,'x')//并在删除的位置添加'x'
  • arr.splice(index,1,'x','y')//并在删除的位置添加'x','y'
  • arr.splice(index,0,'x')//在index处插入'x'
  • arr.splice(index,0,'x','y')
  • call()方法的作用和 apply() 方法类似,区别就是call()方法接受的是参数列表,而apply()方法接受的是一个参数数组。apply 方法developer.mozilla.org/zh-CN/docs/…