javascript算法归并排序

归并排序(Merge Sort)是一种分治思想的排序算法。

它将一个大的数组分割成两个较小的子数组,分别对这两个子数组进行排序,然后将它们合并成一个有序的大数组。

以下是一个使用 JavaScript 实现的归并排序算法:

function mergeSort(arr) {

    if (arr.length < 2) {

        return arr;

    }

    const mid = Math.floor(arr.length / 2);

    const left = arr.slice(0, mid);

    const right = arr.slice(mid);

    return merge(mergeSort(left), mergeSort(right));

}

function merge(left, right) {

    let result = [];

    while (left.length && right.length) {

        if (left[0] < right[0]) {

            result.push(left.shift());

        } else {

            result.push(right.shift());

        }

    }

    while (left.length) {

        result.push(left.shift());

    }

    while (right.length) {

        result.push(right.shift());

    }

    return result;

}

// 测试

const arr = [5, 3, 8, 4, 2];

console.log(mergeSort(arr));

在这个实现中,mergeSort 函数是递归的,它将数组分割成两半,直到数组的长度小于 2(即数组为空或只有一个元素,此时数组已经是有序的)。

然后,它使用 merge 函数将两个已排序的子数组合并成一个有序的大数组。

merge 函数通过比较两个子数组的第一个元素,将较小的元素添加到结果数组中,并从相应的子数组中删除该元素。

这个过程一直持续到其中一个子数组为空。然后,它将另一个子数组的剩余元素添加到结果数组中。

这个算法的时间复杂度是 O(n log n),其中 n 是数组的长度。

这是因为每次递归调用都会将数组的大小减半,所以递归的深度是 log n。

在每一层递归中,我们都需要遍历整个数组来合并它,所以每一层的时间复杂度是 O(n)。因此,总的时间复杂度是 O(n log n)。

文章来自javascript递归调用-javascript教程-我爱编程

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容