乐趣区

关于前端:数据结构排序算法上

排序算法

求 N 个数字的最小值

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

求 N 个数字中的排序

let min = (numbers) =>{if(numbers.length >2){
   return min([number[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]  
    //console.log(`min:${min}`) 测试输入 Min 的值
    numbers.splice(index,1)
    //console.log(`numbers:${numbers}`) 测试输入每一次 numbers 的值
    return [min].concat(sort(numbers))
  }else{return numbers[0] < numbers[1]? numbers :
             numbers.reverse()}
}
  • 数组.concat…(数组 + 另一个数组)
  • splic()数组能够删除 1 项
  • slice()从一个下标切出一个字数组进去

递归

  • 特点
  1. 函数不停调用本人,每次调用的参数略有不同
  2. 当满足某个简略条件时,则实现一个简略的调用
  3. 最终算出后果
  • 了解
  1. 能够用代入法疾速了解递归
  2. 能够用调用栈疾速了解递归
  • 举例说明代入法了解求最小的数

eg: min([2,4,5,1])
= min([2,min([4,5,1])])
= min([2,min([4,min([5,1])])])
= min([2,min([4,Math.min.apply(null,[5,1])])])
= min([2,min([4,1])])
= min([2,Math.min.apply(null,[4,1])])
= min([2,1])
= Math.min.apply(null,[2,1])
= 1

  • Math 的内容
  1. Math 是一个一般的对象,没有函数的共有属性,并不是一个函数,只是一个首字母大写的一般对象
  2. 这是惟一实例:首字母大写是构造函数,Math 除外
  3. 对象都是首字母小写的,即便是 window 也是,除了 Math 以外的对象
退出移动版