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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 从小到大排列的数组(你可以添加多余的帮助函数)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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()
} }
<br>//递归思路理解
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 @   时间观测者  阅读(31)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示