实现归并排序

2018-09-11 02:14 更新

另一种非常常见的中间排序算法是归并排序。像快速排序一样,归并排序也使用一种分而治之递归方法来排序数组。它利用了这样一个事实,只要每个排序首先排序,它就比较容易排序两个数组。但是我们只需要一个数组作为输入,那么我们如何从这个数组中得到两个排序的数组呢?那么我们可以递归地将原始输入分成两部分,直到我们达到一个数组的基数大小写。单项数组是自然排序的,所以我们可以开始组合。此组合将展开分割原始数组的递归调用,最终生成所有元素的最终排序数组。归并排序的步骤是:

1)将输入数组递归分割为一半,直到产生只有一个元素的子数组。

2)将每个排序的子数组合并在一起以产生最终排序的数组。

归并排序是一种有效的排序方法,时间复杂度为O(nlog(n))。这个算法是受欢迎的,因为它是性能较好且相对容易实现的。

除此之外,这将是我们在这里覆盖的最后一个排序算法。然而,在稍后的树数据结构部分中,我们将描述堆排序,另一种在其实现中需要二进制堆的有效排序方法。

var array = [];
(function createArray(size) {
  array.push(+(Math.random() * 100).toFixed(0));
  return (size > 1) ? createArray(size - 1) : undefined;
})(25);


function merge(left,right){
    var result=[];
    while(left.length>0&&right.length>0){
        if(left[0]<right[0]){
            result.push(left.shift());
         }else{
             result.push(right.shift());
         }

        
    }
    return result.concat(left,right);
}
function mergeSort(array) {
  // change code below this line
  if (array.length<=1) {
      return array;
  } 
  var arrayIndex=Math.floor(array.length/2)//选取基准点
  var arr_left=array.splice(0,arrayIndex);
  var arr_right=array.splice(arrayIndex);


  // change code above this line
  return merge(mergeSort(arr_left),mergeSort(arr_right));
}
mergeSort(array)
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号