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;
visited.add(closest);
Object.keys(graph[closest]).forEach(neighbor => {
if (!visited.has(neighbor)) {
const newDistance = distances[closest] + graph[closest][neighbor];
distances[neighbor] = Math.min(distances[neighbor], newDistance);
}
});
}
return distances;
}
数据结构实现
链表的实现:
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;
}
}
实用算法技巧
洗牌算法(Fisher-Yates):
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
这些实现涵盖了JavaScript中常见算法的基本应用,可以根据具体需求进行修改和优化。算法实现时需要注意边界条件和性能优化,特别是对于大规模数据处理的情况。






