美文网首页前端技术讨论
javaScript数据结构和算法--归并排序

javaScript数据结构和算法--归并排序

作者: 安然_她 | 来源:发表于2019-05-15 16:57 被阅读0次

归并排序是一种分治算法,分而治之,将原始数组拆分成最小粒度的数组(数组的长度是1),接着将这些小数组进行归并(merge),直到成为一个排序好的大数组。

归并排序图解

归并排序代码实现:

function MergeSort() {

    const array = [];

    this.insert = function(item) {

        array.push(item)

    }

    this.toString = function() {

        return array.join()

    }

    this.mergeSort = function() {

        arr = mergeSortRec(array);

    }

    const mergeSortRec = function(arr) {

        let length = arr.length;

        if(length === 1) {

            return arr; //分到数组的最小粒度1时,就不再递归调用自身拆分数组,

        }

        const mid = Math.floor(length/2); //把数组拆分成左右两个数组

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

        const right = arr.slice(mid, length);

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

    }

    const merge = function(left, right) {

        const result = [];

        let 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++]);

            }

        }

        while(il < left.length) {

            result.push([left[il++]]);

        }

        while(ir < right.length) {

            result.push(right[ir++]);

        }

        return result;

    }

}

var arr = new MergeSort();

arr.insert(3);

arr.insert(13);

arr.insert(32);

arr.insert(23);

arr.insert(11);

arr.insert(8);

arr.insert(33);

arr.insert(28);

console.log(arr.toString()); // 3,13,32,23,11,8,33,28

arr.mergeSort();

console.log(arr.toString());

相关文章

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 数据结构与算法--归并排序

    数据结构与算法--归并排序 归并排序 归并排序基于一种称为“归并”的简单操作。比如考试可能会分年级排名和班级排名,...

  • 排序算法6:快速排序

    数据结构与算法 快速排序为应用最多的排序算法,因为快速二字而闻名。快速排序和归并排序一样,采用的都是分治思想。 分...

  • 算法与数据结构路线图

    学习算法与数据结构,深刻理解计算机科学 排序算法:插入、冒泡、选择、希尔、快速、归并、堆排序、计数排序、桶排序、基...

  • 排序算法

    常考排序 快速排序 归并排序 归并排序求逆序数对 堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法。 堆积...

  • JavaScript实现经典排序算法

    使用JavaScript实现的经典排序算法 util 冒泡 简单选择 直接插入 快速排序 堆排序 归并排序

  • 2018-06-30

    排序算法之归并排序 归并排序算法是排序算法中的经典算法之一,其核心思想是利用归并的思想实现的排序方法,该算法采用经...

  • 归并排序

    归并排序(Merge Sort): 归并排序是一个相当“稳定”的算法对于其它排序算法,比如希尔排序,快速排序和堆排...

  • javaScript数据结构和算法--归并排序

    归并排序是一种分治算法,分而治之,将原始数组拆分成最小粒度的数组(数组的长度是1),接着将这些小数组进行归并(me...

  • 10大排序算法之【归并排序】

    前几天用c++写排序算法有点上瘾,但是为了雨露均沾,不冷落我的javascript,今天决定用js写归并排序。归并...

网友评论

    本文标题:javaScript数据结构和算法--归并排序

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