//归并排序:分而治之;先分治,分到只有一个元素,再合并
function mergeSort(arr){
if (arr.length===1){
return arr
}
let preArr=arr.slice(0,Math.floor(arr.length/2))
let lastArr=arr.slice(Math.floor(arr.length/2),arr.length)
let res1=mergeSort(preArr)//前半部分已经排好序
let res2=mergeSort(lastArr)//后半部分已经排好序
//合并数组
let res=[]
let i=0;//res1指针
let j=0;//res2指针
while (res1[i]&&res2[j]){
if (res1[i]<=res2[j]){
res.push(res1[i])
i++
}else {
res.push(res2[j])
j++
}
}
//较长数组最后半截合并
if (res[i]){
res=res.concat(res1.slice(i,res1.length))
}else {
res=res.concat(res2.slice(j,res2.length))
}
return res
}
console.log(mergeSort([2,5,3,8,0,2,6,-1]));
5.归并排序
最新推荐文章于 2024-09-11 23:16:45 发布