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

归并排序是一种分治算法,分而治之,将原始数组拆分成最小粒度的数组(数组的长度是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());

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 最近在梳理知识结构,在复习数据结构与算法的时候仔细理了一遍。由于内容比较多,现在整理的是基础的内容: 排序和...
    临水照影233阅读 3,808评论 0 0
  • 本文是lhyt本人原创,希望用通俗易懂的方法来理解一些细节和难点。转载时请注明出处。文章最早出现于本人github...
    lhyt阅读 1,872评论 0 0
  • 排序算法 1、冒泡排序 function bubbleSort(arr){ var i = j = 0; fo...
    LaBaby_阅读 1,696评论 0 1
  • 学习的最高境界——悟 做人的最高境界——舍 生活的最高境界——乐 修炼的最高境界——空 交友的最高境界——诚 人生...
    十年一井阅读 1,306评论 0 0
  • 为什么每天都这么累呢? 上班累,不上班更累! 锻炼身体累,不锻炼身体更累! 早上还没有完全睁开眼睛的时候累,睁开后...
    起舞一笑阅读 1,053评论 0 0