js实现算法
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 = [];
let i = 0, j = 0;
while (i < left.length && j < right.length) {
if (left[i] < right[j]) {
result.push(left[i++]);
} else {
result.push(right[j++]);
}
}
return result.concat(left.slice(i)).concat(right.slice(j));
}
搜索算法
二分查找

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;
}
动态规划
斐波那契数列
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];
}
背包问题

function knapSack(capacity, weights, values, n) {
const dp = Array(n + 1).fill().map(() => Array(capacity + 1).fill(0));
for (let i = 1; i <= n; i++) {
for (let w = 1; w <= capacity; w++) {
if (weights[i - 1] <= w) {
dp[i][w] = Math.max(
values[i - 1] + dp[i - 1][w - weights[i - 1]],
dp[i - 1][w]
);
} else {
dp[i][w] = dp[i - 1][w];
}
}
}
return dp[n][capacity];
}
图算法
Dijkstra 最短路径
function dijkstra(graph, start) {
const distances = {};
const visited = new Set();
for (const vertex in graph) {
distances[vertex] = Infinity;
}
distances[start] = 0;
while (true) {
let current = null;
let shortest = Infinity;
for (const vertex in distances) {
if (!visited.has(vertex) && distances[vertex] < shortest) {
shortest = distances[vertex];
current = vertex;
}
}
if (current === null) break;
visited.add(current);
for (const neighbor in graph[current]) {
const distance = distances[current] + graph[current][neighbor];
if (distance < distances[neighbor]) {
distances[neighbor] = distance;
}
}
}
return distances;
}
字符串算法
KMP 字符串匹配
function kmpSearch(text, pattern) {
const lps = computeLPSArray(pattern);
let i = 0, j = 0;
while (i < text.length) {
if (pattern[j] === text[i]) {
i++;
j++;
}
if (j === pattern.length) {
return i - j;
} else if (i < text.length && pattern[j] !== text[i]) {
if (j !== 0) j = lps[j - 1];
else i++;
}
}
return -1;
}
function computeLPSArray(pattern) {
const lps = Array(pattern.length).fill(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;
}
这些算法示例展示了 JavaScript 实现常见算法的基本方法。实际应用中可能需要根据具体需求进行优化或调整。






