JS 算法与数据结构——排序算法(上)

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

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

let num = min([1,2,3,4])
console.log(num)
//递归思路理解
运行min([1,2,3,4])
1 min([1,min([2,3,4])) #1层
2 min([1,min([2,min([3,4])]))#2层
3 min([1,min([2,3--reutrn Math.min.apply(null,[3,4])])触发else
    return 3
4 min([1,2--reutrn Math.min.apply(null,[2,3]))触发else #2层
    return 2
5 reutrn Math.min.apply(null,[1,2])触发else  #1层
    return 1

  

请写出一个 sort 函数,要求 sort(numbers) 能返回一个把 numbers 从小到大排列的数组(你可以添加多余的帮助函数)

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

let minIndex = (numbers)=>{
  return numbers.indexOf(minNum(numbers)); 
}

let sort = (numbers) => {
  if(numbers.length > 2){
  let index = minIndex(numbers)
  let min = numbers[index]
  numbers.splice(index, 1)
  console.log('min--'+min,'numbers--'+numbers)
//   console.log('minCon--',[min].concat(sort(numbers)))
  return [min].concat(sort(numbers))
}else{
  return numbers[0]<numbers[1] ? numbers :
  numbers.reverse()
} }

//递归思路理解 sort([4,2,1,3]) #1层 1 sort([1]+sort([4,2,3]))#2层 2 sort([1]+sort([2]+sort([4,3])))#3层 3 sort([1]+sort([2]+sort([4,3])→[3,4]))#3层 进入else, return numbers.reverse()) 4 sort([1]+sort([2]+[3,4]))#2层 5 sort([1]+[2,3,4]))#1层 5 return [1,2,3,4]

  

posted @ 2020-12-24 22:53  时间观测者  阅读(26)  评论(0编辑  收藏  举报