时间复杂度:O(N*log(N)) 对N个数排序,每个数logN,二分思想
空间复杂度:O(N) 创建了一个长度为N的辅助空间
节约了比较行为,让每一次的排序都为下一次排序提供了信息,避免了比较行为的浪费。
var time = 1;
function process(arr, L, R) {
if (L == R) {
return;
}
var M = L + (R - L >> 1);
process(arr, L, M);
process(arr, M + 1, R);
merge(arr, L, M, R);
console.log('第' + time + '次');
time++;
console.log(arr);
}
function merge(arr, L, M, R) {
var i = 0, help = [], p1 = L, p2 = M + 1;
while (p1 <= M && p2 <= R) {
if (arr[p1] <= arr[p2]) {
help[i] = arr[p1];
p1++;
i++;
} else {
help[i] = arr[p2];
p2++;
i++;
}
}
while (p1 <= M) {
help[i] = arr[p1];
p1++;
i++;
}
while (p2 <= M) {
help[i] = arr[p2];
p2++;
i++;
}
for (i = 0; i < help.length; i++) {
arr[L + i] = help[i];
}
}
arr1 = [262, 777, 332, 664, 664, 24, 677, 332, 56778, 326];
process(arr1, 0, 9);