实现归并排序
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)
以上内容是否对您有帮助:
← 实现快速排序
更多建议: