美文网首页
JavaScript 递归排序

JavaScript 递归排序

作者: 我是Msorry | 来源:发表于2020-12-12 20:56 被阅读0次

找出数组中最小的项

找出两个数中较小的项
let minOf2 = (numbers) => {
  if(numbers[0] < numbers[1]){
    return numbers[0]
  }else{
    return numbers[1]
  }
}

代码优化

let minOf2 = numbers => numbers[0] < numbers[1] ? numbers[0] : numbers[1]

继续优化

let minOf2 = ([a,b]) => a < b ? a : b

调用

minOf2.call(null,[1,2])
找出三个数中最小的项
let minOf3 = ([a,b,c]) => {
  return minOf2(minOf2[a,b],c)
}
找出四个数中最小的项
let minOf4 = ([a,b,c,d]) => {
  return minOf2(minOf2(minOf2[a,b],c),d)
}

经过推理可以得出,求任意长度的数组的最小值都可以用 minOf2 实现

找出任意长度数组的最小项

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

递归排序

长度为2的数组排序
let sort2 = ([a,b]) => {
  if(a >b){
    return [b,a]
  }else{
    return [a,b]
  }
}
长度为3的数组排序
let minIndex = (numbers) =>{
  return numbers.indexOf(min(numbers))
}
let sort3 = numbers => {
  let index = minIndex(numbers)
  let min = numbers[index]
  numbers.splice(index,1)
  return [min].concat(sort2(numbers))
}
长度为4的数组排序
let sort4 = numbers => {
  let index = minIndex(numbers)
  let min = numbers[index]
  numbers.splice(index,1)
  return [min].concat(sort3(numbers))
}

任意长度的数组都可以多次调用排序,只要把sort2,sort3,sort4都改成sort,就是递归排序

任意长度数组的递归排序

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 sort2(numbers)
  }
}

总结

  1. 每次运算都要有返回值,否则会 undifined
  2. 要有条件终止递归,否则会无限循环
  3. 递归运算时的参数类型应该与定义时保持一致
  4. 递归如果理解不了,就用代入法找规律

相关文章

  • JavaScript 递归排序

    找出数组中最小的项 找出两个数中较小的项 代码优化 继续优化 调用 找出三个数中最小的项 找出四个数中最小的项 经...

  • JavaScript 排序集锦

    JavaScript 之排序集锦 1⃣️ 快速排序 单独开辟两个存储空间 left 和 right 来存储每次递归...

  • 算法设计与分析——5.排序与树结构

    5.1 引言 5.2 递归与排序 5.2.1 选择排序 代码 5.1 选择排序的递归实现 代码 5.2 选择排序...

  • 2020-08-21 算法合集

    1. 冒泡排序 2.选择排序 3. 插入排序 4. 希尔排序 5. 归并排序(递归实现) 6. 快速排序(递归实现...

  • 三大排序算法

    归并排序[稳定的排序算法] 递归实现 非递归实现 快速排序[不稳定的排序算法] 堆排序[不稳定的排序算法]

  • Java——归并排序

    在讲解归并排序之前,我们必须先知道什么是递归,因为在归并排序中我们用到了递归。 递归 什么是递归呢?递归方法就是直...

  • 常见算法的 Python 实现

    二分法查找 非递归版本: 递归方法实现: 冒泡排序 选择排序

  • PHP数组示例算法

    1、冒泡排序 2、归并排序 3、二分查找-递归 4、二分查找-非递归 5、快速排序 6、选择排序 7、插入排序

  • 归并排序

    归并排序:递归加合并的排序

  • Javascript和归并排序

    Javascript和归并排序 这里以递归为例,参考自慕课网刘波波老师的C++版本实现 普通归并(自上而下) 普通...

网友评论

      本文标题:JavaScript 递归排序

      本文链接:https://www.haomeiwen.com/subject/qxpygktx.html