用js来实现所有算法
在 JavaScript 中实现所有算法是一个庞大的任务,因为算法种类繁多,涵盖数据结构、排序、搜索、图论、动态规划等多个领域。以下是部分常见算法的 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++) {
if (arr[i] < pivot) left.push(arr[i]);
else 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) {
if (left[0] < right[0]) result.push(left.shift());
else 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;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
图算法
Dijkstra 最短路径算法
function dijkstra(graph, start) {
const distances = {};
const visited = new Set();
const nodes = Object.keys(graph);
nodes.forEach(node => distances[node] = Infinity);
distances[start] = 0;
while (nodes.length) {
nodes.sort((a, b) => distances[a] - distances[b]);
const closest = nodes.shift();
if (distances[closest] === Infinity) break;
visited.add(closest);
for (let neighbor in graph[closest]) {
if (!visited.has(neighbor)) {
const newDistance = distances[closest] + graph[closest][neighbor];
if (newDistance < distances[neighbor]) {
distances[neighbor] = newDistance;
}
}
}
}
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];
}
数据结构实现
链表
class ListNode {
constructor(val) {
this.val = val;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
}
append(val) {
const newNode = new ListNode(val);
if (!this.head) {
this.head = newNode;
return;
}
let current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
}
字符串算法
KMP 字符串匹配
function buildLPS(pattern) {
const lps = [0];
let len = 0;
let i = 1;
while (i < pattern.length) {
if (pattern[i] === pattern[len]) {
len++;
lps[i] = len;
i++;
} else {
if (len !== 0) len = lps[len - 1];
else {
lps[i] = 0;
i++;
}
}
}
return lps;
}
function KMP(text, pattern) {
const lps = buildLPS(pattern);
let i = 0, j = 0;
while (i < text.length) {
if (text[i] === pattern[j]) {
i++;
j++;
}
if (j === pattern.length) return i - j;
else if (i < text.length && text[i] !== pattern[j]) {
if (j !== 0) j = lps[j - 1];
else i++;
}
}
return -1;
}
这些示例涵盖了算法的主要类别,但实际应用中可能需要根据具体需求进行调整。完整的算法实现通常需要结合具体问题场景进行优化。







