一. 归并排序
1.算法描述:
(1)将数组划分成left和right两部分,分别对left和right循环递归上述操作直至数组的长度为1
(2)从内到外依次完成数组的大小的组合合并
2.算法实现:
function mergeSort(arr){
//循环划分数组直至长度为1
if(arr.length==1)return arr
let midIndex=Math.floor(arr.length/2)
let left=arr.slice(0,midIndex)
let right=arr.slice(midIndex)
return merge(mergeSort(left),mergeSort(right))
}
function merge(left,right){
//组合左右的数组
let result=[]
while(left.length>0&&right.length>0){
if(left[0]<=right[0]){
result.push(left.shift())
}else{
result.push(right.shift())
}
}
if(left.length){
result.push(...left)
}
if(right.length){
result.push(...right)
}
return result
}
3.算法分析
最优时间复杂度:O(nlog2n)
最差时间复杂度:O(nlog2n)
平均时间复杂度:O(nlog2n)
空间复杂度: O(n)
稳定性:稳定