2025-03-29 14:35:49 +08:00

2.0 KiB

1-复杂度

  • 时间复杂度: 算法运行时间随输入规模增长的变化趋势, 关注运行效率
  • 空间复杂度: 算法在运行过程中所需的额外内存空间随输入规模增长的变化趋势, 关注内存占用

常见的时间复杂度

O (1) 常数

示例:访问数组中的某个元素。算法的执行时间不随输入规模变化

function getFirstElement(arr) {
    return arr[0];
}

O (log n) 对数

示例:二分查找。

function binarySearch(arr, target) {
    let left = 0, right = arr.length - 1;
    while (left <= right) {
        let 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;
}

O (n) 线性

示例:遍历数组

function findMax(arr) {
    let max = arr[0];
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] > max) max = arr[i];
    }
    return max;
}

O(n log n) 线性对数

示例:快速排序、归并排序

function quickSort(arr) {
    if (arr.length <= 1) return arr;
    let pivot = arr[0];
    let left = [], 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)];
}

O(n²) 平方

示例:冒泡排序、选择排序

function bubbleSort(arr) {
    let n = arr.length;
    for (let i = 0; i < n - 1; i++) {
        for (let j = 0; j < n - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换元素
                let temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr;
}

O(2ⁿ)

示例:递归计算斐波那契数列

function fibonacci(n) {
    if (n <= 1) return n;
    return fibonacci(n - 1) + fibonacci(n - 2);
}