深复制和二分法

1. 手写深复制

思路1

接收需要深复制的数据,返回深复制数据
1. 首先判断数据类型,如果是基本数据类型,直接返回
2. 如果是引用数据类型,判断是数组还是对象
3. 如果是数组,遍历数组,将每一项进行深复制,然后将复制后的数据push到一个新的数组中,最后返回新的数组
4. 如果是对象,遍历对象,将每一项进行深复制,然后将复制后的数据添加到一个新的对象中,最后返回新的对象
代码实现:
复制代码
function deepClone(obj) {
  if (typeof obj !== 'object' || obj === null) {
    return obj
  }
  let result
  if (Array.isArray(obj)) {
    result = []
    for (let i = 0; i < obj.length; i++) {
      result.push(deepClone(obj[i]))
    }
  } else {
    result = {}
    for (let key in obj) {
      result[key] = deepClone(obj[key])
    }
  }
  return result
}
复制代码

思路2

接收需要深复制的数据和需要递归的初始化数据(防止报错),返回深复制数据
1. 首先判断数据类型,如果是基本数据类型,直接返回
2. 如果接收的数据是引用类型,则直接for in遍历, 判断该数据下的每个属性的类型
3. 如果属性是基础类型直接返回,否则判断是数组还是对象,对象就给当前返回值初始化{}, 数组则是[], 最后执行递归自身。(用的就是基础类型不共享同一指针,引用类型指向同一指针的原理实现深复制)
复制代码
const deepCopy = (parent, child) => {
  if (typeof parent !== 'object' || parent === null) {
    return parent
  }
  const value = child || {};

  for (var i in parent) {
    if (typeof parent[i] === 'object') {
      value[i] = (parent[i].constructor === Array) ? [] : {};
      deepCopy(parent[i], value[i]);
    } else {
      value[i] = parent[i];
    }
  }
  return value;
}
// const a = {
//   b: {
//     c: 1,
//   },
//   d: [2,3,4,5],
//   e: 6
// }
// console.log(deepCopy(a));
复制代码

2. 快速排序(Quicksort)的Javascript实现

接收一个数组:[11,55,34,78,99,24,66,88,46];
输出:[11,24,34,46,55,66,78,88,99];

思路: 使用二分法
第一步:处理异常,如果数组长度小于等于1直接返回
第二步:获取一个数组的中间,定义左边和右边的空数组
第三步:遍历接收的数组,划分大左边或者右边的数据里
第四步:输出【递归左边】【中间数】【递归右边】直到左边和右边只有一个数字
第5步: 使用concat连接得到【左边,终究数,右边】,这时就已经完成了排序。
复制代码
const quicksort = (arr: number[]) => {
  const len = arr.length;
  if (len <= 1) return arr;
  const middId = Math.floor(len / 2);
  const middValue = arr.splice(middId, 1)[0];
  const leftArr: number[] = [];
  const rightArr: number[] = [];
  for (let i = 0; i < arr.length; i ++) {
    if (arr[i] <= middValue) {
      leftArr.push(arr[i]);
    } else {
      rightArr.push(arr[i]);
    }
  }
  return quicksort(leftArr).concat(middValue).concat(quicksort(rightArr));
}

// quicksort([11,55,34,78,99,24,66,88,46])
复制代码

 

posted @   君临天下之徐少  阅读(4)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示