正整数从小到大排序
先从两个数开始
- 首先还是用数组来装这两个数
- 比较第一个数和第二个数的大小,来改变两个数在数组里面的排序
let sort2 = (numbers) => { if(numbers[0] < numbers[1]) { return numbers }else { return numbers.reverse() } } //结构赋值 let sort2 = ([a,b]) => a < b ? [a,b] :[b,a] console.log(sort2.call(null,[2,1])) console.log(sort2.apply(null,[[2,1]]))
### 接下来,三个数从小到大排序
1. 首先求出三个数里面最小的数,将其排在第一位
2. 然后比较剩下的两个数的大小,根据大小改变两个数的排序
3. 再将第一个数和剩下两个数拼接成新的数组
//求最小值的函数
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) => {
return numbers.indexOf(min(numbers))
}
//两个数排序
let sort2 = ([a,b]) => a < b ? [a,b] : [b,a]
//三个数排序
let sort3 = (numbers) => {
let index = minIndex(numbers)
let min = numbers[index]
numbers.splice(index,1)
return [min].concat(sort2(numbers))
}
console.log(sort3.call(null,[2,1,3]))
。。。。同理四个数也可以按照三个数的方法
### 推广到N个数从小到大排序
1. 首先,找出数组中最小的值,在与剩下的数组拼接成数组
2. 再从剩下的数组中,找出最小值,做上面相同的操作
3. 最后拼接成的数组就是最终的从小到大排序的数组
//求最小值的函数
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) => {
return numbers.indexOf(min(numbers))
}
let sort = (numbers) => {
if(numbers.length > 2) {
let index = minIndex(numbers)
let min = numbers[index]
numbers.splice(index,1)
return [min].concat(sort(numbers))
}else {
return numbers[0] < numbers[1] ? numbers : numbers.reverse()
}
}
console.log(sort.call(null,[2,3,1,7,6]))
## 每个递归都可以用循环表示
上述代码中,求最小值得数组下标可以改写成更简单的方式
let minIndex = (numbers) => {
let index = 0;
for (let i = 1; i < numbers.length; i++) {
if (numbers[i] < numbers[index]) {
index = i;
}
}
return index;};