js实现归并排序

  • 归并排序:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
  • 时间复杂度: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实现基数排序
本文为本人学习总结,如有雷同,可联系本人立即修改或者删除

猜你喜欢

转载自blog.csdn.net/qq_40731976/article/details/111511404