算法的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++) {
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;
}
动态规划
斐波那契数列的实现:

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 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;
if (visited.has(closest)) continue;
visited.add(closest);
Object.keys(graph[closest]).forEach(neighbor => {
const newDistance = distances[closest] + graph[closest][neighbor];
if (newDistance < distances[neighbor]) {
distances[neighbor] = newDistance;
}
});
}
return distances;
}
字符串算法
KMP字符串匹配的实现:
function kmpSearch(text, pattern) {
const lps = computeLPSArray(pattern);
let i = 0, j = 0;
const result = [];
while (i < text.length) {
if (pattern[j] === text[i]) {
i++;
j++;
}
if (j === pattern.length) {
result.push(i - j);
j = lps[j - 1];
} else if (i < text.length && pattern[j] !== text[i]) {
j ? j = lps[j - 1] : i++;
}
}
return result;
}
function computeLPSArray(pattern) {
const lps = new Array(pattern.length).fill(0);
let len = 0, i = 1;
while (i < pattern.length) {
if (pattern[i] === pattern[len]) {
len++;
lps[i] = len;
i++;
} else {
len ? len = lps[len - 1] : lps[i++] = 0;
}
}
return lps;
}
这些实现提供了常见算法在JavaScript中的基础版本,可以根据具体需求进行优化和扩展。实际应用中需要考虑输入数据的规模和边界条件处理。






