- 归并排序:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
- 时间复杂度:O(nlogn)
- 稳定性:稳定
- 复杂性:较复杂
- 应用:需要稳定,空间不是很重要的情况
const merger = (leftArr,rightArr) => {
let left_len = leftArr.length
let right_len = rightArr.length
let arr = []
let i = 0
let j = 0
while(i<left_len && j<right_len){
leftArr[i]<rightArr[j] ? arr.push(leftArr[i++]) : arr.push(rightArr[j++])
}
while(i<left_len){
arr.push(leftArr[i++])
}
while(j<right_len){
arr.push(rightArr[j++])
}
return arr
}
const mergeSort = (arr) => {
let length = arr.length
if (length <= 1) {
return arr
}
let mid = Math.floor(length/2)
let leftArr = arr.slice(0,mid)
let rightArr = arr.slice(mid)
return merger(mergeSort(leftArr),mergeSort(rightArr)); //合并左右部分
}
上一篇:js实现堆排序
下一篇:js实现基数排序
本文为本人学习总结,如有雷同,可联系本人立即修改或者删除