Open Betty985 opened 2 years ago
/**
* @param {number[]} nums
* @return {number[]}
*/
var sortArray = function(nums) {
// 归并排序(二叉树的后序遍历)
function sort(nums,l,h){
if(l==h){
return
}
let mid=l+Math.floor((h-l)/2)
sort(nums,l,mid)
sort(nums,mid+1,h)
merge(nums,l,mid,h)
}
function merge(nums,l,mid,h){
let tmp=[]
for (let i = l; i <= h; i++) {
tmp[i] = nums[i];
}
let i=l,j=mid+1
for(let p=l;p<=h;p++){
if(i==mid+1){
// 左边数组合并完成
nums[p]=tmp[j++]
}else if(j==h+1){
// 右边数组合并完成
nums[p]=tmp[i++]
}else if(tmp[i]<=tmp[j]){
nums[p]=tmp[i++]
}else{
nums[p]=tmp[j++]
}
}
}
sort(nums,0,nums.length-1)
return nums
};
思想
递归
分析
归并排序不是原地排序算法
归并排序是一种稳定的排序算法
归并排序的时间复杂度是O(nlogn),空间复杂度是O(n)