排序算法
求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()从一个下标切出一个字数组出来
递归
- 特点
- 函数不停调用自己,每次调用的参数略有不同
- 当满足某个简单条件时,则实现一个简单的调用
- 最终算出结果
- 理解
- 可以用代入法快速理解递归
- 可以用调用栈快速理解递归
- 举例说明代入法理解求最小的数
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的内容
- Math是一个普通的对象,没有函数的共有属性,并不是一个函数,只是一个首字母大写的普通对象
- 这是唯一实例:首字母大写是构造函数,Math除外
- 对象都是首字母小写的,即使是window也是,除了Math以外的对象
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。