当前位置:首页 > JavaScript

用js来实现所有算法

2026-03-01 20:51:38JavaScript

实现所有算法是一个庞大的工程,但可以通过JavaScript实现常见算法类别。以下是关键分类及实现示例:

排序算法

快速排序

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)];
}

归并排序

function mergeSort(arr) {
  if (arr.length <= 1) return arr;
  const mid = Math.floor(arr.length / 2);
  const left = mergeSort(arr.slice(0, mid));
  const right = mergeSort(arr.slice(mid));
  return merge(left, right);
}

function merge(left, right) {
  let result = [];
  while (left.length && right.length) {
    left[0] < right[0] ? result.push(left.shift()) : result.push(right.shift());
  }
  return [...result, ...left, ...right];
}

搜索算法

二分搜索

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;
}

图算法

Dijkstra最短路径

function dijkstra(graph, start) {
  const distances = {};
  const visited = new Set();
  Object.keys(graph).forEach(node => distances[node] = Infinity);
  distances[start] = 0;

  while (true) {
    let current = null;
    for (const node in distances) {
      if (!visited.has(node) && (current === null || distances[node] < distances[current])) {
        current = node;
      }
    }
    if (current === null) break;

    for (const [neighbor, weight] of Object.entries(graph[current])) {
      const newDistance = distances[current] + weight;
      if (newDistance < distances[neighbor]) distances[neighbor] = newDistance;
    }
    visited.add(current);
  }
  return distances;
}

动态规划

斐波那契数列

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];
}

加密算法

SHA-256哈希(使用Web API)

用js来实现所有算法

async function sha256(message) {
  const msgBuffer = new TextEncoder().encode(message);
  const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
  return Array.from(new Uint8Array(hashBuffer)).map(b => b.toString(16).padStart(2, '0')).join('');
}

注意事项

  1. 性能敏感场景应考虑算法时间复杂度,如排序大规模数据时优先选择O(n log n)算法
  2. 加密相关操作应使用浏览器或Node.js内置加密API而非自行实现
  3. 图算法实现时需注意处理循环引用和无限递归情况
  4. 动态规划问题通常需要建立备忘录优化重复计算

完整实现所有算法需要参考《算法导论》等专业资料,上述示例提供了常见算法的JavaScript实现范式。实际开发中建议优先使用经过验证的库(如lodash、crypto-js等)而非重复造轮子。

标签: 来实现算法
分享给朋友:

相关文章

php 实现算法

php 实现算法

PHP 实现常见算法的方法 PHP 作为一门服务器端脚本语言,可以实现多种算法。以下是一些常见算法的 PHP 实现示例。 排序算法 冒泡排序 function bubbleSort($array)…

用JS实现快速排序算法

用JS实现快速排序算法

快速排序的原理 快速排序是一种分治算法,通过选择一个基准元素(pivot)将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归地对这两部分进行排序。 代码实现 function quic…

js实现24点算法

js实现24点算法

24点算法简介 24点游戏的目标是通过加、减、乘、除四则运算,将4个数字组合成结果为24的表达式。以下是基于JavaScript的实现方法。 基本思路 排列组合:生成所有可能的数字排列顺序。 运…

js实现算法

js实现算法

JavaScript 实现常见算法的方法 排序算法 快速排序的实现: function quickSort(arr) { if (arr.length <= 1) return arr;…

js 签名算法实现

js 签名算法实现

签名算法概述 签名算法通常用于确保数据的完整性和真实性,常见于API请求、数据传输等场景。JavaScript中可以通过多种方式实现签名算法,如HMAC、RSA等。 HMAC签名实现 HMAC(Ha…

排序算法 php实现

排序算法 php实现

以下是在PHP中实现常见排序算法的几种方法,每种算法均附上代码示例和简要说明: 冒泡排序 通过重复比较相邻元素并交换位置完成排序,时间复杂度为O(n²)。 function bubbleSort(…