思路
归并排序是成功应用分治法的一个完美的例子,其思想是将原始数组切分成较小的数组,直到每个小数组只有一个位置,接着将小数组归并成较大的数组,直到最后只有一个排序完毕的大数组。由于是分治法,归并排序也是递归的。
function mergeSort(arr) {
if (arr.length == 1) {
return arr
};
var mid = Math.floor(arr.length / 2);
var left_arr = arr.slice(0, mid),
right_arr = arr.slice(mid);
return merge(mergeSort(left_arr), mergeSort(right_arr));
}
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).concat(right);
}
归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。