当前位置:首页 > JavaScript

算法js实现

2026-04-05 14:37:55JavaScript

在JavaScript中实现算法涉及多个方面,包括基础算法、数据结构操作、以及性能优化等。以下是一些常见算法的实现示例和关键点:

排序算法(快速排序)

快速排序通过分治策略实现高效排序,平均时间复杂度为O(n log n)。

算法js实现

function quickSort(arr) {
  if (arr.length <= 1) return arr;
  const pivot = arr[0];
  const left = [];
  const right = [];
  for (let i = 1; i < arr.length; i++) {
    arr[i] < pivot ? left.push(arr[i]) : right.push(arr[i]);
  }
  return [...quickSort(left), pivot, ...quickSort(right)];
}

搜索算法(二分查找)

二分查找要求数组已排序,时间复杂度为O(log n)。

算法js实现

function binarySearch(arr, target) {
  let left = 0;
  let right = arr.length - 1;
  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    if (arr[mid] === target) return mid;
    arr[mid] < target ? left = mid + 1 : right = mid - 1;
  }
  return -1;
}

动态规划(斐波那契数列)

使用备忘录优化递归实现的斐波那契数列,避免重复计算。

function fibonacci(n, memo = {}) {
  if (n in memo) return memo[n];
  if (n <= 2) return 1;
  memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo);
  return memo[n];
}

图算法(Dijkstra最短路径)

适用于加权图的单源最短路径算法,使用优先队列优化。

function dijkstra(graph, start) {
  const distances = {};
  const priorityQueue = new PriorityQueue();
  for (let vertex in graph) {
    distances[vertex] = vertex === start ? 0 : Infinity;
    priorityQueue.enqueue(vertex, distances[vertex]);
  }
  while (!priorityQueue.isEmpty()) {
    const current = priorityQueue.dequeue();
    for (let neighbor in graph[current]) {
      const distance = distances[current] + graph[current][neighbor];
      if (distance < distances[neighbor]) {
        distances[neighbor] = distance;
        priorityQueue.enqueue(neighbor, distance);
      }
    }
  }
  return distances;
}

注意事项

  1. 递归算法需注意堆栈溢出风险,可考虑尾递归优化或迭代实现。
  2. 大数据量时优先选择时间复杂度更优的算法(如排序选用快速排序而非冒泡排序)。
  3. 实际应用中需结合具体场景选择数据结构(如优先队列可用数组模拟或第三方库实现)。

以上代码均为基础实现,生产环境中可能需要添加边界条件检查和性能优化措施。对于复杂算法,建议参考权威算法教材或使用经过验证的库(如lodash的排序实现)。

标签: 算法js
分享给朋友:

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

实现图片旋转js

实现图片旋转js

使用CSS transform属性旋转图片 通过CSS的transform属性可以轻松实现图片旋转。以下是一个简单的示例代码: const image = document.getElement…