堆排序是一种基于完全二叉树的排序算法,它的时间复杂度为 O(nlogn)。下面是 JavaScript 实现堆排序的代码:

function heapSort(array) {
    // 构建大顶堆
    for (let i = Math.floor(array.length / 2) - 1; i >= 0; i--) {
        heapify(array, i, array.length);
    }

    // 交换堆顶和堆底元素,并重新构建大顶堆
    for (let i = array.length - 1; i > 0; i--) {
        swap(array, 0, i);
        heapify(array, 0, i);
    }

    return array;
}

function heapify(array, i, length) {
    let largest = i;
    const left = 2 * i + 1;
    const right = 2 * i + 2;

    // 找出当前结点、左子节点、右子节点中最大的一个
    if (left < length && array[left] > array[largest]) {
        largest = left;
    }

    if (right < length && array[right] > array[largest]) {
        largest = right;
    }

    // 如果当前节点不是最大值,则交换当前节点和最大值,并继续向下构建大顶堆
    if (largest !== i) {
        swap(array, i, largest);
        heapify(array, largest, length);
    }
}

function swap(array, i, j) {
    const temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

在这段代码中,我们首先构建了一个大顶堆,然后逐步将堆顶元素和堆底元素交换,并重新构建大顶堆,最终得到一个有序数组。heapify 函数用于构建大顶堆,它的作用是将当前结点和它的子节点中最大的一个交换位置,并继续向下构建大顶堆。swap 函数用于交换数组中的两个元素。

javascript-实现-堆排序

原文地址: https://www.cveoy.top/t/topic/g2g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录