算法2026-04-15·6 分钟
算法知识库:分治算法实现
JavaScript/TypeScript 实现经典分治算法,如快速排序、归并排序等。
分治算法实现
1. 快速排序(分治版)
ts
function quickSort(arr: number[]): number[] {
if (arr.length <= 1) return arr;
const pivot = arr[Math.floor(arr.length / 2)];
const left = arr.filter((x) => x < pivot);
const equal = arr.filter((x) => x === pivot);
const right = arr.filter((x) => x > pivot);
return [...quickSort(left), ...equal, ...quickSort(right)];
}2. 归并排序
ts
function mergeSort(arr: number[]): number[] {
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: number[], right: number[]): number[] {
const result: number[] = [];
let i = 0;
let 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), right.slice(j));
}3. 二分搜索(分治思想)
ts
function binarySearch(arr: number[], target: number): number {
function search(left: number, right: number): number {
if (left > right) return -1;
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
if (arr[mid] < target) return search(mid + 1, right);
return search(left, mid - 1);
}
return search(0, arr.length - 1);
}4. 实现要点
- 将问题分解为子问题。
- 递归求解子问题。
- 合并子问题结果。
- 适合可分解为独立子问题的问题。
算法分治JavaScript