c语言编程笔录

首页 >   > 笔记大全

笔记大全

TypeScript怎么实现归并排序

更新时间:2023-12-17

归并排序

归并排序是一种分治思想的排序算法,它通过将原始序列拆分成若干个子序列,对子序列进行排序后再合并达到排序的目的。

    function mergeSort(arr: number[]): number[] {
        if (arr.length <= 1) {
            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: number[], right: number[]): number[] {
        const results: number[] = [];
        let i = 0,
            j = 0;
        while (i < left.length && j < right.length) {
            if (left[i] < right[j]) {
                results.push(left[i++]);
            } else {
                results.push(right[j++]);
            }
        }
        return results.concat(left.slice(i)).concat(right.slice(j));
    }

归并排序的核心在于将一个大问题拆分成若干个小问题后再进行合并,而合并排序的实现则依赖于一个合并操作。

合并操作的实现如下代码所示,它会创建一个结果数组,然后通过比较左右序列的第一个元素来进行合并。

    function merge(left: number[], right: number[]): number[] {
        const results: number[] = [];
        let i = 0,
            j = 0;
        while (i < left.length && j < right.length) {
            if (left[i] < right[j]) {
                results.push(left[i++]);
            } else {
                results.push(right[j++]);
            }
        }
        return results.concat(left.slice(i)).concat(right.slice(j));
    }

归并排序算法则是通过递归拆分序列并调用合并操作来实现的。

归并排序的时间复杂度为O(nlogn),并且由于它采用了分治思想,所以它是一种稳定排序算法,不会改变相同元素之间的相对顺序。

总结

归并排序是一种采用分治思想实现的排序算法,它通过递归的方式拆分原始序列并调用合并操作进行排序,最终合并结果得到排序后的序列。

由于归并排序实现依赖于合并操作,因此对于不同类型的序列可以采用不同的合并实现,以达到更好的效率。

此外,由于采用了分治思想并且合并操作稳定,因此归并排序是一种稳定排序算法,并且它的时间复杂度为O(nlogn)。

因此,在实际的开发中,我们可以根据具体需求和场景选择使用归并排序算法,从而达到更好的排序效果。