Javascript算法——合并排序

罕见的内部排序算法有:插入排序、希尔排序挑选排序、冒泡排序、兼并排序、疾速排序、堆排序、基数排序等。这里重要引见兼并排序

一图胜千言:

《Javascript算法——合并排序》

1.兼并排序

1.1 算法形貌

兼并排序是建立在兼并操纵上的一种有用的排序算法。该算法是采纳分治法(Divide and Conquer)的一个典范的运用。 兼并排序法是将两个(或两个以上)有序表兼并成一个新的有序表,即把待排序序列分为多少个子序列,每个子序列是有序的。然后再把有序子序列兼并为团体有序序列。 将已有序的子序列兼并,获得完整有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表兼并成一个有序表,称为2-路兼并。

《Javascript算法——合并排序》

1.2 算法剖析

  • 时候复杂度:O (nlogn)

  • 空间复杂度:O (n)

1.3 算法完成

function merge(leftArr, rightArr){  
    var result = [];  
    while (leftArr.length > 0 && rightArr.length > 0){  
      if (leftArr[0] < rightArr[0])  
        result.push(leftArr.shift()); //把最小的最早掏出,放到效果集合   
      else   
        result.push(rightArr.shift());  
    }   
    return result.concat(leftArr).concat(rightArr);  //剩下的就是兼并,如许就排好序了  
}  

function mergeSort(array){  
    if (array.length == 1) return array;  
    var middle = Math.floor(array.length / 2);       //求出中点  
    var left = array.slice(0, middle);               //支解数组  
    var right = array.slice(middle);  
    return merge(mergeSort(left), mergeSort(right)); //递归兼并与排序  
}  

var arr = mergeSort([32,12,56,78,76,45,36]);
console.log(arr);   // [12, 32, 36, 45, 56, 76, 78]
    原文作者:芒果屋里的猫
    原文地址: https://segmentfault.com/a/1190000008866524
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞