美文网首页
js算法排序-归并排序

js算法排序-归并排序

作者: 小猪佩奇的王子 | 来源:发表于2019-10-30 11:54 被阅读0次
/**
 * 归并排序
 * 采用分治法,
 * 分是将无序列表递归的二分,直到只有一个元素,此时一个元素是有有序的,
 * 治是在每一组都只有一个元素后开始对左右元素比较,处理成小的有序列表,直到所有变为有序
 * @param {*} arr
 */
/**
 * 假设列表为【2,5,4,3】,先分割成只有一个元素的列表[2] [5] [4] [3]
 * 此时left = [2], right =[5],处理成 [2,5]
 * 此时left = [4], right=[3], 处理成[3,4]
 * 此时left = [2,5], right = [3,4], 处理成[2,3,4,5]
 */
function mergeSort(arr) {
    var length = arr.length
    if (length === 1) {
        return arr
    }
    var mid = Math.floor(length / 2)
    var left = arr.slice(0, mid)
    var right = arr.slice(mid)
    return merge(mergeSort(left), mergeSort(right))
}

function merge(left, right) {
    var temp = []
    var i = 0,
        j = 0
    while (i < left.length && j < right.length) {
        if (left[i] < right[j]) {
            temp.push(left[i])
            i++
        } else {
            temp.push(right[j])
            j++
        }
    }

    while (i < left.length) {
        temp.push(left[i])
        i++
    }
    while (j < right.length) {
        temp.push(right[j])
        j++
    }
    console.log(temp)
    return temp
}

console.log(mergeSort(arr))

相关文章

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • 2018-06-30

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

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • 归并排序

    图解排序算法(四)之归并排序 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用...

  • 算法入门——归并排序、希尔排序

    上篇文章我们学习了算法入门——堆排序,这篇文章我们学习算法入门——归并排序、希尔排序。 归并排序 归并排序是将一个...

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 归并排序

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

  • 算法 第二章第二部分笔记

    各种排序算法的性能特点 选择排序 插入排序 希尔排序 归并排序 本地归并排序 自底向上的归并排序 快速排序 三向切...

  • 归并排序

    归并排序 这个排序算法是建立在归并操作上的一种有效的排序算法,算法主要采用分治法,归并排序的算法复杂度为O(n*l...

  • 归并排序

    归并排序 归并排序(Mergesort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分...

网友评论

      本文标题:js算法排序-归并排序

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