美文网首页
合并排序

合并排序

作者: __越过山丘__ | 来源:发表于2018-12-26 11:34 被阅读0次

合并排序(Merge sort)则是一种被广泛使用的排序方法。

它的基本思想是,将两个已经排序的数组合并,要比从头开始排序所有元素来得快。因此,可以将数组拆开,分成n个只有一个元素的数组,然后不断地两两合并,直到全部排序完成。

以对数组 [3, 2, 4, 5, 1] 进行从小到大排序为例,步骤如下:

  • 将数组分成 [3, 2, 4] 和 [5, 1] 两部分。
  • 将 [3, 2, 4] 分成 [3, 2] 和 [4] 两部分。
  • 将 [3, 2] 分成 [3] 和 [2] 两部分,然后合并成 [2, 3]。
  • 将 [2, 3] 和 [4] 合并成 [2, 3, 4]。
  • 将 [5, 1] 分成 [5] 和 [1] 两部分,然后合并成 [1, 5]。
  • 将 [2, 3, 4] 和 [1, 5] 合并成 [1, 2, 3, 4, 5]。

代码:

function merge(left, right){
    var result  = [],
        il      = 0,
        ir      = 0;

    while (il < left.length && ir < right.length){
        if (left[il] < right[ir]){
            result.push(left[il++]);
        } else {
            result.push(right[ir++]);
        }
    }
    return result.concat(left.slice(il)).concat(right.slice(ir));
}

function mergeSort(myArray){

    if (myArray.length < 2) {
        return myArray;
    }

    var middle = Math.floor(myArray.length / 2),
        left    = myArray.slice(0, middle),
        right   = myArray.slice(middle),
        params = merge(mergeSort(left), mergeSort(right));
    
    // 在返回的数组头部,添加两个元素,第一个是0,第二个是返回的数组长度
    params.unshift(0, myArray.length);

    // splice用来替换数组元素,它接受多个参数,
    // 第一个是开始替换的位置,第二个是需要替换的个数,后面就是所有新加入的元素。
    // 因为splice不接受数组作为参数,所以采用apply的写法。
    // 这一句的意思就是原来的myArray数组替换成排序后的myArray
    myArray.splice.apply(myArray, params);

    // 返回排序后的数组
    return myArray;
}

原文链接:https://javascript.ruanyifeng.com/library/sorting.html#toc3

相关文章

  • leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请...

  • Python 排序算法汇总

    快速排序 合并排序

  • ARTS第五周2020620

    Algorithm 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

  • 合并K个排序链表【LeetCode:23】

    题目: 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: ...

  • Swift - LeetCode - 合并K个排序链表

    题目 合并K个排序链表 问题: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 解题思路:...

  • LeetCode:合并K个排序链表

    合并K个排序链表(困难) 题目叙述: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

  • Timsort详解

    原理介绍 TimSort是结合了合并排序(合并排序)和插入排序(插入排序)而得出的排序算法,它在现实中有很好的效率...

  • 归并排序

    归并排序:递归加合并的排序

  • 合并排序

    合并排序

  • 在excel中排序的几个方法

    一、横向排序 按第4行进行排序 排序方法演示: 二、合并单元格排序 如果表格中有合并单元格,排序将变得非常困难。 ...

网友评论

      本文标题:合并排序

      本文链接:https://www.haomeiwen.com/subject/arfhlqtx.html