归并排序:采用分治思想,将数组逐步分解为只含有一个元素的小数组,再将小数组逐步合并,在合并的过程中进行排序。
时间复杂度:O(n(log(n)))
代码实现:
let arr = [2,1,6,5,4,8,9,7,3];
function mergeSort(arr){
if(arr.length > 1){
let mid = Math.floor(arr.length / 2);
let left = mergeSort(arr.slice(0,mid));
let right = mergeSort(arr.slice(mid));
arr = merge(left,right);
}
return arr;
}
function merge(left,right){
let i = 0;
let j = 0;
let result = [];
while(i < left.length && j < right.length){
if(left[i] < right[j]){
result.push(left[i]);
i ++;
}else{
result.push(right[j]);
j ++;
}
}
result = result.concat(i < left.length ? left.slice(i) : right.slice(j));
return result;
}
arr = mergeSort(arr);
console.log(arr);