1.分治思想
将一个大问题递归分解为每个小问题,直到不能再分解,逐一求解最后再合并,具体实现分为三个过程:分解=>求解=>合并
2.实现代码
排序算法中的归并排序及快速排序就使用到了分治的思想
// 归并排序:先分后排
function mergeSort(arr){
let len = arr.length
if(len===1) return arr // 基准
let mid = Math.floor(len/2)
let left = arr.splice(0,mid)
let right = arr.splice(mid)
return arr = merge(mergeSort(left),mergeSort(right)) // 入执行栈
}
function merge(left,right){
let l = 0
let lMax = l.length-1
let r = 0
let rMax = r.length-1
let res = []
while(l<=lMax && r<=rMax){
if(left[l]<right[r]) res.push(left[l++])
else res.push(right[r++])
}
while(l<=lMax) res.push(left[l++])
while(r<=rMax) res.push(right[r++])
return res
}
// 快速排序:先排后分
function quickSort(arr){
let len = arr.length
if(len===1) return arr // 基准
let mid = arr.splice(Math.floor(len/2),1)[0]
let left = []
let right = []
arr.forEach(item=>{
if(item<=mid) left.push(item)
else right.push(item)
})
return arr = [...quickSort(left), mid, ...quickSort(right)]
}